Nginx網頁優化與防盜鏈

weixin_50344843發表於2020-12-01

Nginx服務優化

配置Nginx隱藏版本號

隱藏Nginx版本號,避免安全漏洞洩漏

Nginx隱藏版本號的方法

  • 修改配置檔案法
  vi /etc/nginx.conf
  server_tokens off;		# 在http下新增 如下圖

在這裡插入圖片描述

在這裡插入圖片描述

  • 修改原始碼法
  vi /etc/nginx.conf
  server_tokens on;#http下

  vi nginx-1.12.2/src/core/nginx.h
  #define nginx_version      1112012		# 版本資訊
  #define NGINX_VERSION      "1.1.1"		# 版本號
  #define NGINX_VER          "IIS/" NGINX_VERSION	# 版本髮型平臺

  systemctl stop nginx.service    # 需要關閉nginx服務然後重新編譯安裝
  cd nginx-1.12.2/
  make && make install
  systemctl start nginx
  curl -I  http://20.0.0.13

在這裡插入圖片描述
修改前
在這裡插入圖片描述
修改後
在這裡插入圖片描述
驗證
在這裡插入圖片描述

修改Nginx使用者與組

  • Nginx執行時程式需要有使用者與組的支援,以實現對網站檔案讀取時進行訪問控制
  • Nginx預設使用nobody使用者賬號與組賬號
  • 修改的方法
    • 編譯安裝時指定使用者與組
    • 修改配置檔案指定使用者與組
      在這裡插入圖片描述
      修改配置檔案法指定
  • 新建使用者賬號,如nginx
  • 修改主配置檔案user選項,指定使用者賬號與組賬號
  • 重啟nginx服務,使配置生效
  • 使用ps aux命令檢視nginx的程式資訊,驗證執行使用者賬號改變效果

配置Nginx網頁快取時間

網頁快取設定作用

  • 當Nginx將網頁資料返回給客戶端後,可設定快取的時間,以方便在日後進行相同內容的請求時直接返回,避免重複請求,加快了訪問速度
  • 一般針對靜態網頁設定,對動態網頁不設定快取時間

網頁快取設定方法

網頁設定快取時間
在這裡插入圖片描述
加入一張圖片
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
訪問測試
在這裡插入圖片描述
在這裡插入圖片描述

實現Nginx的日誌切割

  • 隨著Nginx執行時間增加,日誌也會增加。為了方便掌握Nginx執行狀態,需要時刻關注Nginx日誌檔案
  • 太大的日誌檔案對監控是一個大災難
    • 定期進行日誌檔案的切割
  • Nginx自身不具備日誌分割處理的功能,但可以通過Nginx訊號控制功能的指令碼實現日誌的自動切割
  • 通過Linux的計劃任務週期性地進行日誌切割

日誌分割的方法
編寫指令碼進行日誌切割的思路:

  • 設定時間變數
  • 設定儲存日誌路徑
  • 將目前的日誌檔案進行重新命名
  • 重建新日誌檔案
  • 刪除時間過長的日誌檔案
  • 設定cron任務,定期執行指令碼自動進行日誌分割

通過指令碼來實現日誌分割的效果
檢視日誌檔案
在這裡插入圖片描述
在這裡插入圖片描述

vi rizhi.sh

#!/bin/bash
#分割日誌
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 $logs_path
mv /usr/local/nginx/logs/aa.com.access.log ${logs_path}/aa.com.access.log-$d
kill -HUP $(cat $pid_path)
find $logs_path -mtime +60 | xargs rm -rf

chmod +x rizhi.sh

cd /usr/local/nginx/logs/
chmod +x access.log
./rizhi.sh

在這裡插入圖片描述
在這裡插入圖片描述
通過crontab任務計劃來實現定時實現指令碼的執行
在這裡插入圖片描述

在這裡插入圖片描述

Nginx深入優化

配置Nginx實現連線超時

  • 為避免同一客戶端長時間佔用連線,造成資源浪費,可設定相應的連線超時引數,實現控制連線訪問時間
  • 超時引數
    • Keepalive_ timeout 設定連線保持超時時間
    • Client header timeout 指定等待客戶端傳送請求頭的超時時間
    • Client body_ _timeout 設定請求體讀超時時間

配置檔案

[root@server3 ~]# vi /etc/nginx.conf 
[root@server3 ~]# nginx -t
[root@server3 ~]# systemctl stop nginx
[root@server3 ~]# systemctl start nginx

新增修改
 keepalive_timeout  65 180; 前面引數是伺服器主動關閉的超時時間(預設是65秒),後面引數是客戶機瀏覽器主動關閉的時間
 client_header_timeout 80;  等待客戶端傳送請求頭的超時時間超時會傳送408錯誤
 client_body_timeout 80;    設定客戶端傳送請求體超時時間

在這裡插入圖片描述
訪問測試抓包
在這裡插入圖片描述

更改Nginx執行程式數

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

更改程式數

  • 一般設為CPU的個數或者核數
  • 在高併發情況下可設定為CPU個數或者核數的2倍
  • 增加程式數,可減少了系統的開銷,提升了服務速度
  • 使用ps aux檢視執行程式數的變化情況
  • 預設情況,Nginx的多 個程式可能跑在一-個CPU上,可以分配不同的程式給不同的CPU處理,充分利用硬體多核多CPU
  • 在一臺4核物理伺服器,進行配置,將程式進行分配

更改程式數的配置方法

  • 修改配置檔案,修改程式配置引數
  • 修改配置檔案的worker_ processes引數

檢視CPU或者核數

[root@server3 ~]# cat /proc/cpuinfo | grep -c "physical"    
[root@server3 ~]# vi /etc/nginx.conf 
[root@server3 ~]# nginx -t
[root@server3 ~]# systemctl stop nginx
[root@server3 ~]# systemctl start nginx
[root@server3 ~]# ps aux | grep nginx   檢視狀態

新增
worker_processes  8;     工作程式
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;       CPU或者核的分配情況
use epoll;
worker_connections  4096;

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

配置Nginx實現網頁壓縮功能

  • Nginx的ngx_http_gzip_module壓縮模組提供對檔案內容壓縮的功能

  • 允許Nginx伺服器將輸出內容在傳送客戶端之前進行壓縮,以節省網站頻寬,提升使用者的訪問體驗,預設已經安裝

  • 可在配置檔案中加入相應的壓縮功能引數對壓縮效能進行優化

壓縮功能引數

壓縮引數說明
gzip on開啟gzip壓縮輸出
gzip_ min_ length 1k設定允許壓縮的頁面最小位元組數
gzip__buffers 4 16k申請4個單位為16k的記憶體作為壓縮結果流快取,預設值是申請與始資料大小相同的記憶體空間來儲存gzip壓縮結果
gzip_ http_ version 1.0設定識別http協議版本,預設是1.1,目前大部分瀏覽器已經支援gzip解壓,但處理較慢,也比較消耗伺服器CPU資源
gzip_ comp_ level 2指定gzip壓縮比,1壓縮比最小,處理速度最快; 9壓縮比最大,傳輸速度快,但處理速度最慢
gzip_ types text/plain:壓縮型別,對哪些網頁文件啟用壓縮功能
gzip_vary on讓前端快取伺服器快取經過gzip壓縮的頁面

壓縮配置

[root@server3 ~]# vi /etc/nginx.conf 
[root@server3 ~]# nginx -t
[root@server3 ~]# systemctl stop nginx
[root@server3 ~]# systemctl start nginx

新增修改    
    gzip  on;                開啟gzip壓縮功能
    gzip_min_length 1k;       壓縮閥值
    gzip_buffers 4 16k;     buffer大小為4個16k快取區大小
    gzip_http_version 1.1;   壓縮版本
    gzip_comp_level 6;       壓縮比率,最小為1,處理速度快,傳輸速度慢,9最大壓縮比,處理速度慢,傳輸速度快
    gzip_types text/plain text/css text/javascript application/x-javascript application/javascript application/json application/x-httpd-php application/xml image/jpg image/jpeg image/gif image/png;
    gzip_disable "MSIE [1-6]\.";     配置禁用gzip條件,支援正則,表示ie6以下不啟用gzip
    gzip_vary on;      選擇支援very header可以讓前端的快取伺服器快取經過gzip壓縮的頁面

在這裡插入圖片描述
在這裡插入圖片描述

配置Nginx實現防盜鏈

  • 在企業網站服務中,一般都要配置防盜鏈功能,以避免網站內容被非法盜用,造成經濟損失
  • Nginx防盜鏈功能也非常強大。預設情況下,只需要進行簡單的配置,即可實現防盜鏈處理
  • 配置流程
    • 配置Nginx實現防盜鏈
    • 重啟服務,再次訪問圖片,檢測防盜效果
  • 配置說明
    • ~* .(jpg|gif|swf)$:匹配以.jpg或.swf結尾的不區分大小寫的檔案
    • valid_referes:設定信任的網站,即能引用相應圖片的網站
    • 網址或者域名:referer中包含相關字串的網址
    • if語句:如果連結的來源域名不在valid_referers所列出的列表中,$invalid_referer為1,則執行後面的操作,即進行重寫或返回403頁面

配置檔案

[root@server3 ~]# vi /etc/nginx.conf 
[root@server3 ~]# nginx -tul
[root@server3 ~]# systemctl stop nginx
[root@server3 ~]# systemctl start nginx
[root@server3 ~]# cd /usr/local/nginx/html/
[root@server3 html]# ls -lh

在這裡插入圖片描述
主機上訪問
20.0.0.13
在這裡插入圖片描述
盜鏈機上訪問
20.0.0.15
在這裡插入圖片描述

對FPM模組進行引數優化

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

  • 根據伺服器的記憶體與服務負載,調整FPM模組引數

  • 啟動fpm程式方式,通過pm引數指定

    • static:將產生固定數量的fpm程式 (靜態)
    • dynamic:將以動態的方式產生fpm程式 (動態)

FPM優化引數

Static的方式的引數

  • pm.max_children: 指定啟動的程式數量

Dynamic方式的引數

  • pm.max_children:指定啟動程式數的最大值
  • pm.start_servers: 動態方式下初始的fpm程式數
  • pm.min_spare_servers: 動態方式下最小的fpm空閒程式數
  • pm.max_spare_servers: 動態方式下最大的fpm空閒程式數

在論壇安裝裝置上操作
動態方式
在這裡插入圖片描述
在這裡插入圖片描述
編輯配置檔案

[root@server1 php-fpm.d]# vi www.conf
[root@server1 php-fpm.d]# cd

pm = dynamic
pm.max_children = 20    static模式下空閒程式數上限,大於下面的值
pm.start_servers = 5         動態方式下預設開啟的程式數,在最小和最大之間
pm.min_spare_servers = 2     動態方式下最少空閒程式數
pm.max_spare_servers = 8   動態方式下最大空閒程式數

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

相關文章