在Centos7中Nginx使用教程 二
Nginx 日誌切割-手動
現有的日誌都會存在 access.log 文件中,但是隨着時間的推移,這個文件的內容會越來越多,體積會越來越大,不便於運維人員查看,所以我們可以通過把這個大的日誌文件切割爲多份不同的小文件作爲日誌,切割規則可以以天爲單位,如果每天有幾百G或者幾個T的日誌的話,則可以按需以每半天或者每小時對日誌切割一下。
1.創建一個shell可執行文件:cut_my_log.sh,內容爲:
#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx主進程發送信號,用於重新打開日誌文件
kill -USR1 `cat $PID`
2.爲cut_my_log.sh添加可執行的權限:
chmod +x cut_my_log.sh
3.測試日誌切割後的結果:
./cut_my_log.sh
Nginx 日誌切割-定時
1.安裝定時任務:
yum -y install crontabs
2.crontab -e 編輯並且添加一行新的任務:
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
3.重啓定時任務:
service crond restart
附:常用定時任務命令:
service crond start //啓動服務
service crond stop //關閉服務
service crond restart //重啓服務
service crond reload //重新載入配置
crontab -e // 編輯任務
crontab -l // 查看任務列表
定時任務表達式:
Cron表達式是,分爲5或6個域,每個域代表一個含義,如下所示:
分 時 日 月 星期幾 年(可選)
取值範圍 0-59 0-23 1-31 1-12 1-7 2019/2020/2021/…
每分鐘執行:
*/1 * * * *
每日凌晨(每天晚上23:59)執行:
59 23 * * *
每日凌晨1點執行:
0 1 * * *
章節問答筆記資料
那麼配置了這麼多我們再來看看location的配置規則
root 與 alias
假如服務器路徑爲:/home/huadaxia/files/img/face.png
root 路徑完全匹配訪問
配置的時候爲:
location /huadaxia {
root /home
}
用戶訪問的時候請求爲:url:port/huadaxia/files/img/face.png
alias 可以爲你的路徑做一個別名,對用戶透明
location /hello {
alias /home/huadaxia
}
用戶訪問的時候請求爲:url:port/hello/files/img/face.png
location 的匹配規則
空格:默認匹配,普通匹配
location / {
root /home;
}
=:精確匹配
(就是在/home/huadaxia/img/face1.png)這個圖片外面的人可以訪問
location = /huadaxia/img/face1.png {
root /home;
}
~*:匹配正則表達式,不區分大小寫,就是說所有的/home下面的圖片後綴爲GIF|jpg|png|jpeg可以訪問
#符合圖片的顯示
location ~* .(GIF|jpg|png|jpeg) {
root /home;
}
~:匹配正則表達式,區分大小寫
#GIF必須大寫才能匹配到
location ~ .(GIF|jpg|png|jpeg) {
root /home;
}
^~:以某個字符路徑開頭
location ^~ /huadaxia/img {
root /home;
}
Nginx 跨域配置支持
在我們的springboot項目中也可以進行跨域訪問,那麼我用過比較常見的前後端分離模式,以及動靜分離多是採用Nginx配置跨域這纔是主流。
springboot中
在nginx中
#允許跨域請求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允許帶上cookie請求
add_header 'Access-Control-Allow-Credentials' 'true';
#允許請求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允許請求的header
add_header 'Access-Control-Allow-Headers' *;
Nginx防盜鏈配置,防盜鏈就是爲了防止別人盜用你的圖片等靜態資源
防止的方式有多種
1:水印,品牌宣傳,你的帶寬,服務器足夠
2:防火牆,直接控制,前提是你知道IP來源
3:防盜鏈策略下面的方法是直接給予404的錯誤提示
#對源站點驗證
valid_referers *.huadaxia.com;
#非法引入會進入下方判斷
if ($invalid_referer) {
return 404;
}
listen 90;
server_name localhost;
#允許跨域請求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允許帶上cookie請求
add_header 'Access-Control-Allow-Credentials' 'true';
#允許請求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允許請求的header
add_header 'Access-Control-Allow-Headers' *;
#對源站點驗證
valid_referers *.huadaxia.com;
#非法引入會進入下方判斷
if ($invalid_referer) {
return 404;
}
upstream:負載均衡
默認情況下是輪詢發送
upstream 指令參數 max_conns
worker進程設置1個,便於測試觀察成功的連接數
worker_processes 1;
upstream tomcats {
server 192.168.1.173:8080 max_conns=2;
server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
}
upstream 指令參數 slow_start
商業版,需要付費
upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;
# server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=2;
server 192.168.1.175:8080 weight=2;
}
注意
該參數不能使用在hash和random load balancing中。
如果在 upstream 中只有一臺 server,則該參數失效。
章節問答筆記資料
upstream 指令參數 down、backup
#down用於標記服務節點不可用:
upstream tomcats {
server 192.168.1.173:8080 down;
# server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
backup表示當前服務器節點是備用機,只有在其他的服務器都宕機以後,自己纔會加入到集羣中,被用戶訪問到:
upstream tomcats {
server 192.168.1.173:8080 backup;
# server 192.168.1.190:8080;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
backup參數不能使用在hash和random load balancing中。
upstream 指令參數 max_fails、fail_timeout
用戶訪問的時候請求爲:url:port/huadaxia/files/img/face.pngmax_fails:表示失敗幾次,則標記server已宕機,剔出上游服務。
fail_timeout:表示失敗的重試時間。
假設目前設置如下:
max_fails=2 fail_timeout=15s
則代表在15秒內請求某一server失敗達到2次後,則認爲該server已經掛了或者宕機了,隨後再過15秒,這15秒內不會有新的請求到達剛剛掛掉的節點上,而是會請求到正常運作的server,15秒後會再有新請求嘗試連接掛掉的server,如果還是失敗,重複上一過程,直到恢復。
Keepalived 提高吞吐量
keepalived: 設置長連接處理的數量
proxy_http_version:設置長連接http版本爲1.1
proxy_set_header:清除connection header 信息
upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;
server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;
keepalive 32;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
負載均衡 ip_hash
ip_hash 可以保證用戶訪問可以請求到上游服務中的固定的服務器,前提是用戶ip沒有發生更改。
使用ip_hash的注意點:
不能把後臺服務器直接移除,只能標記down.
upstream tomcats {
ip_hash;
server 192.168.1.173:8080;
server 192.168.1.174:8080 down;
server 192.168.1.175:8080;
}
下面的只算前面三位的意思是比如你的ip是192.168.1.*,那麼iphash算法是默認算前面的三位,所以你在內網中的話只有一臺給你訪問
但是這有的話也很麻煩的,就是當你丟了一臺tomcat(宕機)那麼又出現了新問題用戶的session又要存另外一臺,大部分session會改變,所以我們要用下面的一致性hash算法
一致性session是怎麼解決這個問題的呢,保證只有宕機的用戶會連接服務器其他人session還是一樣呢,
一致性哈希算法你可以把它看成一條直線,下面的0和2的32次方減一當作地址
把他們當成圓環,並且有這麼多的節點當節點3宕機了那麼其他用戶不用換服務器
隻影響連接節點3的用戶,其他用戶不受到影響
consistent_hash
upstream tomcats {
consistent_hash $request_uri;
server 192.168.1.173:8080;
server 192.168.1.174:8080 down;
server 192.168.1.175:8080;
}
負載均衡 url_hash 與 least_conn
根據每次請求的url地址,hash後訪問到固定的服務器節點。(自動的)
upstream tomcats {
# url hash
hash $request_uri;
# 最少連接數
# least_conn
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
}
}
Nginx的緩存
瀏覽器緩存:
加速用戶訪問,提升單個用戶(瀏覽器訪問者)體驗,緩存在本地
Nginx緩存
緩存在nginx端,提升所有訪問到nginx這一端的用戶
提升訪問上游(upstream)服務器的速度
用戶訪問仍然會產生請求流量
控制瀏覽器緩存:
location /files {
alias /home/huadaxia;
# expires 10s;
# expires @22h30m;
# expires -1h;
# expires epoch;
# expires off;
expires max;
}
Nginx的反向代理緩存
#keys_zone 設置共享內存以及佔用空間大小
#keys_zone 設置共享內存以及佔用的空間大小
#max_size 設置緩存大小
#inactive 超過此時間則緩存自動清理
#use_temp_path 關閉零時目錄
proxy_cache_path /usr/local/nginx/upsteam_cache keys_zone=mycache:5m max_size=1g inactive=30s use_temp_path=off
location / {
proxy_pass http://tomcats;
# 啓用緩存,和keys_zone一致
proxy_cache mycache;
# 針對200和304狀態碼緩存時間爲8小時
proxy_cache_valid 200 304 8h;
}
使用Nginx配置HTTPS域名證書
這個的前提是你得有域名,如果沒有的話去阿里雲或者騰訊雲申請一個
- 安裝SSL模塊
- 安裝SSL模塊
要在nginx中配置https,就必須安裝ssl模塊,也就是: http_ssl_module。
進入到nginx的解壓目錄: /home/software/nginx-1.16.1
新增ssl模塊(原來的那些模塊需要保留)
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_ssl_module
編譯和安裝
make
make install
配置HTTPS
把ssl證書 *.crt 和 私鑰 *.key 拷貝到/usr/local/nginx/conf目錄中
按我這麼配置
server {
listen 443 ssl;
server_name 你的域名;
root html;
keepalive_timeout 70;
location / {
root html;
index index.html index.htm;
}
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_certificate 你自己的pem.pem;
ssl_certificate_key 你自己的key.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
}
如果你覺得對你有幫助請給我點個贊謝謝了