<li id="jut4n"></li>
  • 系統城裝機大師 - 固鎮縣祥瑞電腦科技銷售部宣傳站!

    當前位置:首頁 > server > anz > 詳細頁面

    Nginx的優化、安全與防盜鏈實例詳解

    時間:2022-10-11來源:系統城裝機大師作者:佚名

    1.Nginx的頁面優化

    1.1 Nginx的網頁壓縮 

     在Nginx的ngx_http_gzip_module壓縮模塊提供對文件內容壓縮的功能。進行相關的配置修改,就能實現Nginx頁面的壓縮,達到節約帶寬,提升用戶訪問速度

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vim /usr/local/nginx/conf/nginx.conf
    http {
    ..........
    gzip  on;
        gzip_min_length 1k;
        gzip_buffers 4 64k;
        gzip_http_version 1.1;
        gzip_comp_level 6;
        gzip_vary on;
    gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
    }

    重啟服務,進行訪問測試:

    1.2  配置Nginx的圖片緩存 

    當Nginx將網頁數據返回給客戶端后,可設置緩存的時間,以方便在日后進行相同內容的請求時直接返回,避免重復請求,加快了訪問速度。

    一般針對靜態網頁設置,對動態網頁不設置緩存時間。

    1
    2
    3
    4
    5
    6
    7
    8
    vim /usr/local/nginx/conf/nginx.conf
    http {
    .................
     location ~* \.(gif|jpg|jepg|bmp|ico)$ {
                 root html;
                 expires 1d;            
             }
    }

    重啟服務,測試訪問: 

    1.3  Nginx的連接超時設置 

    • HTTP有一個KeepAlive模式,它告訴web服務器在處理完一個請求后保持這個TCP連接的打開狀態。若接收到來自同一客戶端的其它請求,服務端會利用這個未被關閉的連接,而不需要再建立一個連接。
    • KeepAlive 在一段時間內保持打開狀態,它們會在這段時間內占用資源。占用過多就會影響性能。
    • 在企業網站中,為了避免同一個客戶長時間占用連接,造成資源浪費,可設置相應的連接超時參數,實現控制連接訪問時間??梢孕薷呐渲梦募?nginx.conf,設置 keepalive_timeout超時。
    1
    2
    3
    4
    5
    6
    7
    8
    vim /usr/local/nginx/conf/nginx.conf
     http {
     ......
         keepalive_timeout 65 180;       //設置連接超時時間   
         client_header_timeout 80;
         client_body_timeout 80;
     ......
     }
    • 指定KeepAlive的超時時間(timeout) 。指定每個TCP連接最多可以保持多長時間,服務器將會在這個時間后關閉連接。
    • Nginx的默認值是65秒,有些瀏覽器最多只保持60秒,所以可以設定為60秒。若將它設置為0,就禁止了keepalive 連接。
    • 第二個參數(可選的)指定了在響應頭Keep-Alive: timeout=t ime中的time值。這個頭能夠讓一 些瀏覽器主動關閉連接,這樣服務器就不必去關閉連接了。沒有這個參數,Nginx 不會發送Keep- Alive 響應頭。

     重啟服務,訪問測試:

    1.4 Nginx的并發設置

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

    查看cpu的核心數,根據核心數來設置工作進程數

    1
    2
    3
    4
    5
    6
    #1、查看cpu核數
    cat /proc/cpuinfo |grep processor|wc -l

    cat /proc/cpuinfo |grep -c processor

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

    1 [root@localhost html]#ps aux | grep nginx

    修改工作進程核心數 :

    1
    2
    3
    4
    vim /usr/local/nginx/conf/nginx.conf
     worker_processes  2;        #修改為與CPU核數相同
     worker_cpu_affinity 01 10;  #設置每個進程由不同cpu處理,進程數配為4時0001 0010 0100 1000
     ?

    測試結果:

    1 [root@localhost html]#ps aux | grep nginx

    2.Nginx的頁面安全

     ——隱藏Nginx的版本號  

    2.1 查看Nginx版本的方式

    方式一:curl模擬訪問獲取

    1 [root@localhost ~]#curl -I 192.168.73.105

    方式二:瀏覽器訪問查看 

     火狐訪問瀏覽器 ,F12查看網絡信息

    2.2 隱藏版本號 

    方法一:修改配置文件,關閉版本號 

    1
    2
    3
    4
    5
    6
    7
    vim /usr/local/nginx/conf/nginx.conf
    http {
        include       mime.types;
        default_type  application/octet-stream;
        server_tokens off;      #添加這一行,關閉版本號
        ......
    }

     

     測試結果:

     方法二:修改源碼文件中的版本號,重新編譯安裝

    1
    2
    3
    4
    5
    6
    7
    8
    cd /opt/nginx-1.12.0/src/core/
    #修改前進行備份
    cp nginx.h  nginx.h.bak
      
    vimn ginx.h
      
    #define NGINX_VERSION      "1.12.0"
    #define NGINX_VER          "nginx/" NGINX_VERSION

    修改完配置后切換到Nginx軟件包中,進行重新編譯安裝 :

    1
    2
    3
    4
    cd /opt/nginx-1.12.0/
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
      
    make -J 2 && make install

    再次修改主配置文件,打開版本號顯示 :

    1
    2
    3
    4
    5
    6
    7
    vim /usr/local/nginx/conf/nginx.conf
     http {
         include       mime.types;
         default_type  application/octet-stream;
         server_tokens on;
         ......
     }

     重啟服務,進行測試:

    3.Nginx的日志分割

    Nginx與apache的不同之處,就是Nginx本身并為設計日志分割工具,所以需要運維人員進行腳本編寫來實現日志分割

    編寫日志分割腳本 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    cd /opt
    vim cutlogs.sh
      
    #!/bin/bash
      
    #nginx 分割日志腳本
    #用變量day獲取前天日期的時間記錄
    day=$(date -d "-1 day" "+%Y%m%d")
    #獲取日志的目錄
    logs_path="/var/log/nginx"
    #獲取運行時nginx的進程號
    pid_path="/usr/local/nginx/logs/nginx.pid"
    #二元表達式,如果前面不成立則執行后面的式子
    #前面判斷該目錄是否存在,后面則表示不存在則自動創建該目錄
    [ -d $logs_path ] || mkdir -p $logs_path
    #將生成的日志按照date生成的時間格式改名并移動到指定的路徑中保存
    mv /usr/local/nginx/logs/access.log ${logs_path}/access.log-$day
    #重新生成一個新的日志
    kill -USR1 $(cat $pid_path)
    #日志文件清理,將30天前的日志進行清除
    find $logs_path -mtime +30 -exec rm -rf {} \ ;

    2. 執行腳本進行測試

    3. 將日志腳本添加至計劃性任務

    1
    2
    3
    4
    [root@localhost opt]#vim cutlogs.sh
    [root@localhost opt]#chmod +x cutlogs.sh
    [root@localhost opt]#crontab -e
    0 1 * * * /opt/cutlogs.sh

    4.Nginx防盜鏈

    4.1 盜鏈的過程

     Nginx盜鏈的過程與apache一致,均是通過網頁瀏覽,將網站圖片重定向到自己的網站上

    https://www.jb51.net/article/264450.htm

    4.2 Nginx防盜鏈的設置

     修改主配配置文件,添加防盜鏈設置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    vim /usr/local/nginx/conf/nginx.conf
    http {
    ...........
    server{
    ...........
    location ~* \.(jpg|gif|swf)$ {
             root  html;
             expires 1d;
             valid_referers none blocked *.test.com test.com;
             if ( $invalid_referer ) {
               rewrite ^/ http://www.test.com/error.png;
               }
            }
    ............
    }
    ...............
    }

     在 /var/local/nginx/html 下放置好error.png 

    進行盜鏈測試 

    盜鏈主機html網頁設置: 

    第三方用戶訪問盜鏈主機:

    訪問前設置:

    1.關閉防火墻工具firewalld和selinux

    2.將域名對應的IP添加到  /etc/hosts 中 

    第三方訪問原主機 :

    5.fpm參數優化

    Nginx的PHP解析功能實現如果是交由FPM處理的,為了提高PHP的處理速度,可對FPM模塊進行參數的調整。

    根據服務器的內存與服務負載,調整FPM模塊參數。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    vim /usr/local/php/etc/php-fpm.conf
    pid = run/php-fpm.pid
    ?
    vim /usr/local/php/etc/php-fpm.d/www.conf
    --96行--
    pm = dynamic                #fpm進程啟動方式,動態的
    --107行--
    pm.max_children=20          #fpm進程啟動的最大進程數
    --112行--
    pm.start_servers = 5        #動態方式下啟動時默認開啟的進程數,在最小和最大之間
    --117行--
    pm.min_spare_servers = 2    #動態方式下最小空閑進程數
    --122行--
    pm.max_spare_servers = 8    #動態方式下最大空閑進程數 ?
    ?
    kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`         #重啟php-fpm
    netstat -anpt | grep 9000

    總結

    到此這篇關于Nginx的優化、安全與防盜鏈的文章就介紹到這了

    分享到:

    相關信息

    • aarch64服務器部署mysql的流程分析

      aarch64服務器-部署mysql 1、創建工作目錄 2、編寫docker-compose.yaml 3、編寫數據庫配置文件。 4、啟動 5、測試...

      2022-10-02

    • 解決Navicat 連接服務器不成功的問題

      Navicat 連接服務器不成功(Access denied for user 'root'@ '*.*.*.*' (using password: YES)),出現這種原因一般是服務器的root用戶沒有開啟訪問權限,本文給大家分享解決方法...

      2022-10-02

    系統教程欄目

    欄目熱門教程

    人氣教程排行

    站長推薦

    熱門系統下載

    淑芬两腿间又痒了