首頁 > 軟體

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

2022-10-10 14:02:10

1.Nginx的頁面優化

1.1 Nginx的網頁壓縮 

 在Nginx的ngx_http_gzip_module壓縮模組提供對檔案內容壓縮的功能。進行相關的設定修改,就能實現Nginx頁面的壓縮,達到節約頻寬,提升使用者存取速度

 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將網頁資料返回給使用者端後,可設定快取的時間,以方便在日後進行相同內容的請求時直接返回,避免重複請求,加快了存取速度。

一般針對靜態網頁設定,對動態網頁不設定快取時間。

 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超時。
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、檢視cpu核數
 cat /proc/cpuinfo |grep processor|wc -l
 或
 cat /proc/cpuinfo |grep -c processor
 或
 cat /proc/cpuinfo | grep -c "physical id"
 

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

修改工作程序核心數 :

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

測試結果:

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

2.Nginx的頁面安全

 ——隱藏Nginx的版本號  

2.1 檢視Nginx版本的方式

方式一:curl模擬存取獲取

[root@localhost ~]#curl -I 192.168.73.105

方式二:瀏覽器存取檢視 

 火狐存取瀏覽器 ,F12檢視網路資訊

2.2 隱藏版本號 

方法一:修改組態檔,關閉版本號 

 vim /usr/local/nginx/conf/nginx.conf
 http {
     include       mime.types;
     default_type  application/octet-stream;
     server_tokens off;      #新增這一行,關閉版本號
     ......
 }
 

 測試結果:

 方法二:修改原始碼檔案中的版本號,重新編譯安裝

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軟體包中,進行重新編譯安裝 :

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

再次修改主組態檔,開啟版本號顯示 :

vim /usr/local/nginx/conf/nginx.conf
 http {
     include       mime.types;
     default_type  application/octet-stream;
     server_tokens on;
     ......
 }
 

 重啟服務,進行測試:

3.Nginx的紀錄檔分割

Nginx與apache的不同之處,就是Nginx本身併為設計紀錄檔分割工具,所以需要運維人員進行指令碼編寫來實現紀錄檔分割

編寫紀錄檔分割指令碼 

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. 將紀錄檔指令碼新增至計劃性任務

[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防盜鏈的設定

 修改主配組態檔,新增防盜鏈設定

 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模組引數。

 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的優化、安全與防盜鏈的文章就介紹到這了,更多相關Nginx優化 安全與防盜鏈內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com