天天看點

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

# 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   //重新開機服務           

繼續閱讀