Nginx優化

一、配置nginx隱藏版本號
在生產環境中,需要隱藏nginx的版本號,以避免安全漏洞的泄露
查看方法

  • 使用fiddler工具在Windows客戶端查看nginx版本號
  • 在centos系統中使用"curl -I 網址" 命令查看
    nginx隱藏版本號的方法
  • 修改配置文件法
  • 修改源碼法
    1、修改配置文件法
    (1)nginx的配置文件中server_tokens選項的值設置爲off
    [root@nginx ~]# curl -I http://192.168.150.213
    Server: nginx/1.12.2
    [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
        server_tokens off;

    (2)重啓服務,訪問網站使用curl -I 命令檢測

    [root@nginx ~]# service nginx restart
    [root@nginx ~]# curl -I http://192.168.150.213
    Server: nginx

    2、修改源碼法
    (1)nginx源碼文件nginx-1.12.2/src/core/nginx.h 包含了版本信息,可以隨意設置

    [root@nginx ~]# cd /opt/nginx-1.12.2/src/core/
    [root@nginx core]# vim nginx.h
    #define NGINX_VERSION      "1.1.1"   #將1.12.2版本號改爲1.1.1

    (2)重新編譯安裝,隱藏版本信息
    (3)重啓服務,訪問網站使用curl -I 命令檢測

    [root@nginx ~]# service nginx restart 
    [root@nginx ~]# curl -I http://192.168.150.213
    Server: nginx/1.1.1

二、修改nginx用戶與組

Nginx運行時進程需要有用戶與組的支持,以實現對網站文件讀取時進行訪問控制
Nginx默認使用nobody用戶賬號與組賬號,一般也要進行修改
修改的方法

  • 編譯安裝時指定用戶與組
  • 修改配置文件指定用戶與組
    1、編譯安裝時指定
    (1)創建用戶賬號與組賬號,如nginx
    (2)在編譯安裝時–user與–group指定Nginx服務的運行用戶與組賬號
    2、修改配置文件指定
    (1)修改主配置文件user選項,指定用戶賬號
    [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
    user  nginx nginx;

    (2)重啓nginx服務,使配置生效
    (3)使用ps aux命令查看nginx的進程信息,驗證運行用戶賬號改變效果
    Nginx優化
    三、配置nginx網頁緩存時間
    當Nginx將網頁數據返回給客戶端後,可設置緩存的時間,以方便在日後進行相同內容的請求時直接返回,避免重複請求,加快了訪問速度
    一般針對靜態網頁設置,對動態網頁不設置緩存時間
    可在Windows客戶端中使用fiddler查看網頁緩存時間
    設置方法

  • 可修改配置文件,在http段、或者server段、或者location段加入對特定內容的過期參數
    示例
  • 修改nginx的配置文件,在location段加入expires參數
    [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
        location ~ \.(gif|jepg|jpg|ico|bmp|png)$ {
            root html;
            expires 1d;
        }

    Nginx優化
    四、實現nginx的日誌切割
    隨着Nginx運行時間增加,日誌也會增加,爲了方便掌握Nginx運行狀態,需要時刻關注Nginx日誌文件
    太大的日誌文件對監控是一個大災難

  • 定期進行日誌文件的切割
    Nginx自身不具備日誌分割處理的功能,但可以通過Nginx信號控制功能的腳本實現日誌的自動切割,並通過Linux的計劃任務週期性地進行日誌切割
    編寫腳本進行日誌切割的思路
  • 設置時間變量
  • 設置保存日誌路徑
  • 將目前的日誌文件進行重命名
  • 刪除時間過長的日誌文件
  • 設置cron任務,定期執行腳本自動進行日誌分割
    [root@nginx opt]# vim feng.sh
    #!/bin/bash
    #Filename:feng.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
    [root@nginx opt]# chmod +x feng.sh

    Nginx優化
    五、配置nginx實現連接超時
    在企業網站中,爲了避免同一個客戶長時間佔用連接,造成資源浪費,可設置相應的連接超時參數,實現控制連接訪問時間
    使用Fiddler工具查看connection參數
    超時參數講解

  • Keepalive_timeout
    設置連接保持超時時間,一般可只設置該參數,默認爲75秒,可根據網站的情況設置,或者關閉,可在http段、 server段、 或者location段設置
  • Client_header_timeout
    指定等待客戶端發送請求頭的超時時間
  • Client_body_timeout
    設置請求體讀超時時間
    [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
    keepalive_timeout  65 180;
    client_header_timeout 80;
    client_body_timeout 80;

    六、更改nginx運行進程數
    在高併發場景,需要啓動更多的Nginx進程以保證快速響應,以處理用戶的請求,避免造成阻塞
    可以使用ps aux命令查看Nginx運行進程的個數
    更改進程數的配置方法

  • 修改配置文件,修改進程配置參數
    修改配置文件的worker_processes參數
  • 一般設爲CPU的個數或者核數
  • 在高併發情況下可設置爲CPU個數或者核數的2倍
    運行進程數多-些,響應訪問請求時,Nginx就不會臨時啓動新的進程提供服務,減少了系統的開銷,提升了服務速度
    使用ps aux查看運行進程數的變化情況
    默認情況,Nginx的多個進程可能跑在一個CPU上, 可以分配不同的進程給不同的CPU處理,充分利用硬件多核多CPU
    在一臺2核物理服務器,可進行以下配置,將進程進行分配
    [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
    worker_processes  2;
    worker_cpu_affinity 01 10;

    Nginx優化
    七、配置nginx實現網頁壓縮功能
    Nginx的ngx_http_gzip_module壓縮模塊提供對文件內容壓縮的功能
    允許Nginx服務器將輸出內容在發送客戶端之前進行壓縮,以節約網站帶寬,提升用戶的訪問體驗,默認已經安裝
    可在配置文件中加入相應的壓縮功能參數對壓縮性能進行優化
    壓縮功能參數詳解

  • gzip on:開啓gzip壓縮輸出
  • gzip_min_length 1k:用於設置允許壓縮的頁面最小字節數
  • gzip_buffers 416k:表示申請4個單位爲1 6k的內存作爲壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果
  • zip_http_version 1.0:用於設置識別http協議版本,默認是1.1,目前大部分瀏覽器已經支持gzip解壓,但處理最慢,也比較消耗服務器CPU資源
  • gzip_comp_level 2:用來指定gzip壓縮比,1壓縮比最小,處理速度最快; 9壓縮比最大,傳輸速度快,但處理速度最慢,使用默認即可
  • gzip_types text/plain:壓縮類型,是就對哪些網頁文檔啓用壓縮功能
  • gzip_vary on:選項可以讓前端的緩存服務器緩存經過gzip壓縮的頁面
    將以上的壓縮功能參數加入到主配置文件httpd配置中段
    [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
    gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
    [root@nginx ~]# service nginx restart 
    [root@nginx ~]# systemctl stop firewalld.service 
    [root@nginx ~]# setenforce 0

    Nginx優化

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