Nginx (engine x) 是一個高性能的HTTP和反向代理服務器, 輕量級、高併發的web服務器。
在實際的生產環境中,咱們仍然不可能直接使用默認配置的Nginx來充當服務器。畢竟,爲了更充分合理地利用Nginx服務器,咱們都應該根 據本身的實際須要對nginx的默認配置做出一些必要的調整。javascript
優化:隱藏版本號 、修改用戶與組 、 網頁緩存時間、 日誌切割 、 鏈接超時 、更改進程數 、網頁壓縮、 防盜鏈 、FPM參數優化php
隱藏版本能夠減小被攻JI的風險,保護服務器安全運行。css
# 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。html
# vim /usr/local/nginx/conf/nginx.conf user nginx nginx; //修改 # systemclt restart nginx # ps aux | grep nginx //查看nginx進程信息(主進程root用戶,子進程nginx用戶)
當Nginx將網頁數據放回給客戶端後,能夠設置緩存時間,以便往後進行重複請求訪問,以加快訪問速度、同時減輕服務器壓力,通常對靜態資源進行設置,對動態網頁不要設置緩存時間。java
# 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 -rfnginx
# chmod +x fenge.sh # ./fenge.sh # crontab -e //設置成周期性計劃任務 0 1 * * * /opt/fenge.sh //天天凌晨1點執行
通常網站中,爲了不同一個客戶長時間佔用鏈接,形成資源浪費,可設置相應的鏈接超時參數,實現對鏈接訪問時間的控制。web
# 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;
指定請求體讀超時時間vim
# 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/ //請求自定義的頭部信息
Nginx的PHP解析功能實現是由FPM處理的,爲了提升PHP的處理速度,可對FPM模塊進行參數的調整。
1:安裝帶有FPM模塊的PHP環境;
2:FPM進程有兩種啓動方式,由pm參數指定,分別是static和dynamic,前者將產生固定數據的FPM進程,後者將以動態的方式產生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 //重啓服務