1. 程式人生 > >Nginx深度優化

Nginx深度優化

功能 文件讀取 aux mtime nco 隱藏版本號 ali ecb pid

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

  • 一、隱藏版本號

    1.在centos7系統中通過curl命令查看

    curl -I http://192.168.100.26

    技術分享圖片

    2.修改nginx.conf配置文件,在http{}內添加server_tokens off;語句

    技術分享圖片

    3.重啟nginx

    killall -1 nginx

    4.使用curl命令查看驗證

    curl -I http://192.168.100.26

    技術分享圖片


    二、修改用戶與組

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

    1.編譯nginx時指定用戶與組

    ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_stub_status_module

    2.修改nginx配置文件指定用戶與組

    vim /usr/local/nginx/conf/nginx.conf

    技術分享圖片

    3.重啟nginx

    killall -1 nginx

    4.查看nginx進程信息(主進程root用戶,子進程nginx用戶)

    ps aux | grep nginx

    技術分享圖片


    三、網頁緩存時間

    當Nginx將網頁數據放回給客戶端後,可以設置緩存時間,以便日後進行重復請求訪問,以加快訪問速度、同時減輕服務器壓力,一般對靜態資源進行設置,對動態網頁不要設置緩存時間。

    1.下面對網站的圖片進行指定緩存時間設置

    技術分享圖片

    2.修改nginx配置文件,指定緩存時間為1天

    vim /usr/local/nginx/conf/nginx.conf

    location ~.(gif|jpg|jepg|png|bmp|ico)$ {
    root html;
    expires 1d;
    }

    技術分享圖片

    3.重啟nginx

    killall -1 nginx

    4.Fiddler工具進行抓包驗證

    技術分享圖片


    四、日誌切割

    Nginx通過nginx的信號控制功能腳本來實現日誌的自動切割,並將腳本加入到Linux的計劃性任務中,讓腳本在每天固定的時間執行,得以實現日誌切割功能。

    1.編寫fenge.sh腳本

    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 #刪除30天前的日誌文件

    2. 為腳本賦予執行權限

    chmod +x /opt/fenge.sh

    3.執行腳本,測試日誌文件是否分割成功

    . /fenge.sh

    技術分享圖片

    4.添加計劃性任務

    crontab -e

    #每日淩晨1:00執行腳本
    0 1 * /opt/fenge.sh


    五、連接超時

    一般網站中,為了避免同一個客戶長時間占用連接,造成資源浪費,可設置相應的連接超時參數,實現對連接訪問時間的控制。

    1. 修改nginx.conf配置文件

    vim /usr/local/nginx/conf/nginx.conf

    技術分享圖片

    2.重啟nginx

    killall -1 nginx

    3.對網站進行訪問,並使用Fiddler工具進行抓包驗證

    技術分享圖片


    六、更改進程數

    在高並發環境中,需要啟動更多的Nginx進程以保證快速響應,用以處理用戶的請求,避免造成阻塞。

    1.查看ngixn運行進程的個數

    cat /proc/cpuinfo | grep -c "physical"

    2.修改nginx.conf配置文件

    vim /usr/local/nginx/conf/nginx.conf

    技術分享圖片

    3.重啟nginx

    killall-1 nginx

    4.查看nginx進程數

    ps aux | grep nginx

    技術分享圖片


    七、網頁壓縮

    Nginx服務器將輸出內容壓縮後進行傳輸,以節約網站的帶寬,提升用戶的訪問體驗,默認已經安裝了該模塊。

    1.修改nginx.conf配置文件

    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;

    2.重啟nginx

    killall -1 nginx

    3.創建一個大於1KB以上的網頁文件,然後對其進行訪問抓包

    curl -I  -H "Accept-Encoding: gzip, deflate" 192.168.100.26/

    技術分享圖片


    八、防盜鏈

    在網站中,一般都要配置防盜鏈功能,以避免網站內容被非法盜用,造成經濟損失,也避免了流量的浪費。

    1.修改nginx.conf配置文件

    vim /usr/local/nginx/conf/nginx.conf

    location ~.(jpg|gif|swf)$ { #匹配.jpg 、.gif 、或 .swf結尾的文件
    valid_referers none blocked
    .abc.com abc.com; #信任域名站點
    if ( $invalid_referer ) {
    rewrite ^/ http://www.abc.com/error.png; #重寫返回error.png
    }
    }

    2.重啟nginx

    killall -1 nginx

    九、FPM參數優化

    Nginx的PHP解析功能實現是由FPM處理的,為了提高PHP的處理速度,可對FPM模塊進行參數的調整。
    1.安裝帶有FPM模塊的PHP環境;
    2.FPM進程有兩種啟動方式,由pm參數指定,分別是static和dynamic,前者將產生固定數據的FPM進程,後者將以動態的方式產生FPM進程;

    1.修改php-fpm.conf文件

    vi php-fpm.conf

    pid = run/php-fpm.pid
    pm = dynamic #動態方式
    pm.max_children=20 #最大啟動進程數量為20個
    pm.start_servers = 5 #初始啟動時進程為5個
    pm.min_spare_servers = 2 #最小空閑進程數為2個
    pm.max_spare_servers = 8 #最大空閑進程數為8個

    Nginx深度優化