Nginx深入優化
Nginx (engine x) 是一個高性能的HTTP和反向代理伺服器, 輕量級、高并發的web伺服器。
在實際的生産環境中,我們仍然不可能直接使用預設配置的Nginx來充當伺服器。畢竟,為了更充分合理地利用Nginx伺服器,我們都應該根 據自己的實際需要對nginx的預設配置作出一些必要的調整。
優化:隐藏版本号 、修改使用者與組 、 網頁緩存時間、 日志切割 、 連接配接逾時 、更改程序數 、網頁壓縮、 防盜鍊 、FPM參數優化
-
隐藏版本号
- 隐藏版本可以減少被攻JI的風險,保護伺服器安全運作。
# curl -I http://192.168.200.131/ //檢視web資訊 可以看到nginx版本号
# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; //添加該行
...
}
# systemctl stop nginx
# systemctl start nginx //重新開機服務
# curl -I http://192.168.200.131/
-
修改使用者與組
Nginx運作時程序需要有使用者群組的支援,用以實作對網站檔案讀取時進行通路控制。主程序由root建立,子程序由指定的使用者與組建立,預設為nobody。
# vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; //修改
# systemclt restart nginx
# ps aux | grep nginx //檢視nginx程序資訊(主程序root使用者,子程序nginx使用者)
-
緩存時間
當Nginx将網頁資料放回給用戶端後,可以設定緩存時間,以便日後進行重複請求通路,以加快通路速度、同時減輕伺服器壓力,一般對靜态資源進行設定,對動态網頁不要設定緩存時間。
# vim /usr/local/nginx/conf/nginx.conf ***server裡面添 :緩存為1天*** location ~\.(gif|jpg|jepg|png|bmp|ico)$ { root html; expires 1d; } # systemclt restart nginx
-
日志切割
# vim /opt/fenge.sh //編寫日志切割腳本
#!/bin/bash
#Filename:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d") #顯示一天前的時間
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d
kill -USR1 $(cat $pid_path)
find $logs_path -mtime +30 | xargs rm -rf
# chmod +x fenge.sh # ./fenge.sh # crontab -e //設定成周期性計劃任務 0 1 * * * /opt/fenge.sh //每天淩晨1點執行
-
連接配接逾時
一般網站中,為了避免同一個客戶長時間占用連接配接,造成資源浪費,可設定相應的連接配接逾時參數,實作對連接配接通路時間的控制。
# vim /usr/local/nginx/conf/nginx.conf
http {
...
keepalive_timeout 65 180; //設定逾時180秒
client_header_timeout 80;
client_body_timeout 80;
...
}
keepalive_timeout 65 180;
第一個參數:指定了與用戶端的keep-alive連接配接逾時時間;值為0會禁用keep-alive用戶端連接配接;
第二個參數:可選、在響應的header域中設定一個值“Keep-Alive: timeout=time”;
client_header_timeout 80;
指定等待用戶端發送請求頭的逾時時間
client_body_timeout 80;
指定請求體讀逾時時間
# systemclt restart nginx //重新開機服務
-
更改程序數
在高并發環境中,需要啟動更多的Nginx程序以保證快速響應,用以處理使用者的請求,避免造成阻塞。
# cat /proc/cpuinfo | grep -c "physical" //cpu核數
# vim /usr/local/nginx/conf/nginx.conf
worker_processes 4; //修改為核數相同或者2倍
worker_cpu_affinity 0001 0010 0100 1000; //設定每個程序由不同cpu處理
# systemclt restart nginx //重新開機服務
# ps aux | grep nginx //檢視程序數
-
網頁壓縮
Nginx伺服器将輸出内容壓縮後進行傳輸,以節約網站的帶寬,提升使用者的通路體驗,預設已經安裝了該子產品。
# vim /usr/local/nginx/conf/nginx.conf gzip on; gzip_buffers 4 64k; gzip_http_version 1.1; gzip_comp_level 2; gzip_min_length 1k; gzip_vary on; gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss text/jpg text/png; # systemclt restart nginx //重新開機服務 # curl -I -H "Accept-Encoding: gzip, deflate" 192.168.200.131/ //請求自定義的頭部資訊
-
fpm參數優化
# vi php-fpm.conf
pid = run/php-fpm.pid
pm = dynamic
pm.max_children=20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
-
防盜鍊、
# vim /usr/local/nginx/conf/nginx.conf
location ~*\.(jpg|gif|swf)$ {
valid_referers none blocked *.benet.com benet.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.benet.com/error.png;
}
}
//比對jpg、gif、swf 時,傳回error.png (error.png 放在站點目錄)
# systemclt restart nginx //重新開機服務