Nginx深入優化

Nginx深入優化

Nginx (engine x) 是一個高性能的HTTP和反向代理服務器, 輕量級、高併發的web服務器。
在實際的生產環境中,我們仍然不可能直接使用默認配置的Nginx來充當服務器。畢竟,爲了更充分合理地利用Nginx服務器,我們都應該根 據自己的實際需要對nginx的默認配置作出一些必要的調整。

優化:隱藏版本號 、修改用戶與組 、 網頁緩存時間、 日誌切割 、 連接超時 、更改進程數 、網頁壓縮、 防盜鏈 、FPM參數優化

  • 隱藏版本號

  • 隱藏版本可以減少被攻JI的風險,保護服務器安全運行。

    # curl -I http://192.168.200.131/     //查看web信息 可以看到nginx版本號

    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深入優化

  • 修改用戶與組

Nginx運行時進程需要有用戶和組的支持,用以實現對網站文件讀取時進行訪問控制。主進程由root創建,子進程由指定的用戶與組創建,默認爲nobody。

# vim /usr/local/nginx/conf/nginx.conf
    user  nginx nginx;   //修改
# systemclt restart nginx
# ps aux | grep nginx    //查看nginx進程信息(主進程root用戶,子進程nginx用戶)

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

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參數優化

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  放在站點目錄)

Nginx深入優化

# systemclt restart nginx   //重啓服務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章