手把手教學:Nginx效能調優+防盜鏈規則,30分鐘搞定生產級配置

目錄
  • 1.Nginx服務最佳化
    • (1)實驗演練
    • (1)配置Nginx隱藏版本號
    • (2)修改Nginx使用者與組
    • (3)配置Nginx網頁快取時間
    • (4)實現Nginx的日誌切割
    • (5)配置Nginx實現連線超時
    • (6)更改Nginx執行程序數
    • (7)配置Nginx實現網頁壓縮功能
    • (8)配置Nginx實現防盜鏈
    • (9)nginx常用模組

1.Nginx服務最佳化

(1)配置Nginx隱藏版本號

隱藏Nginx版本號,避免安全漏洞洩漏:修改配置檔案法;修改原始碼法

server_tokens off; ##新增,關閉版本號
nginx.h ##修改原始碼

重新編譯安裝

./configure --prefix=

/usr/

local/nginx --user=nginx --group=nginx --

with

-http_stub_status_module

make -j

2

&& make install

headers-more-nginx-module

-0.34

.tar.gz外掛包,解壓到一個目錄,編譯安裝nginx,./configure --add-module=

'模組路徑'

&&

make

-j

2

&&

make

install 修改nginx.conf 檔案,在http配置塊加more_clear_ headers

'響應頭欄位'

; ————可去除響應頭任何欄位

(2)修改Nginx使用者與組

Nginx執行時程序需要有使用者與組的支援,以實現對網站檔案讀取時進行訪問控制

Nginx預設使用nobody使用者賬號與組賬號

修改的方法:編譯安裝時指定使用者與組;修改配置檔案指定使用者與組

user 使用者名稱 組名;

(3)配置Nginx網頁快取時間

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

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

設定方法:修改配置檔案,在http段、或者server段、或者location段加入對特定內容的過期引數

expires 快取時間;

(4)實現Nginx的日誌切割

隨著Nginx執行時間增加,日誌也會增加。為了方便掌握Nginx執行狀態,需要時刻關注Nginx日誌檔案

太大的日誌檔案對監控是一個大災難:定期進行日誌檔案的切割

Nginx自身不具備日誌分割處理的功能,但可以透過Nginx訊號控制功能的指令碼實現日誌的自動切割

透過Linux的計劃任務週期性地進行日誌切割

shell指令碼 + crontab

在linux作業系統中,每個檔案都有很多的時間引數,其中有三個比較主要,分別是ctime,atime,mtime

ctime(

statustime

):

當修改檔案的許可權或者屬性的時候,就會更新這個時間,ctime並不是

createtime

,更像是change

time

只有當更新檔案的屬性或者許可權的時候才會更新這個時間,但是更改內容的話是不會更新這個時間。
atime(accesstime):

當使用這個檔案的時候就會更新這個時間。
mtime(modification

time

):

當修改檔案的內容資料的時候,就會更新這個時間,而更改許可權或者屬性,mtime不會改變,這就是和ctime的區別。

(5)配置Nginx實現連線超時

為避免同一客戶端長時間佔用連線,造成資源浪費,可設定相應的連線超時引數,實現控制連線訪問時間
超時引數:

Keepalive_timeout 服務端超時時間 客戶端超時時間;##設定連線保持超時時間
Client_header_timeout ##指定等待客戶端傳送請求頭的超時時間
Client_body_timeout ##設定請求體讀超時時間

keepalive_timeout

指定KeepAlive的超時時間(timeout)。指定一個長連線最多可以保持多長時間,伺服器將會在這個時間後關閉連線。Nginx的預設值是

65

秒,有些瀏覽器最多隻保持

60

秒,所以可以設定為

60

秒。若將它設定為

0

,就禁止了keepalive 連線。

第二個引數(可選的)指定了在響應頭Keep-Alive:timeout=

time

中的

time

值。這個頭能夠讓一些瀏覽器主動關閉連線,這樣伺服器就不必去關閉連線了。沒有這個引數,Nginx 不會發送 Keep-Alive 響應頭。
client_header_timeout

客戶端向服務端傳送一個完整的 request header 的超時時間。如果客戶端在指定時間內沒有傳送一個完整的 request header,Nginx 返回 HTTP

408

(Request Timed

Out

)。
client_body_timeout

指定客戶端與服務端建立連線後傳送 request

body

的超時時間。如果客戶端在指定時間內沒有傳送任何內容,Nginx 返回 HTTP

408

(Request Timed

Out

)。

(6)更改Nginx執行程序數

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

修改配置檔案的worker_processes引數:一般設為CPU的個數或者核數;在高併發情況下可設定為CPU個數或者核數的2倍

增加程序數,可減少了系統的開銷,提升了服務速度

預設情況,Nginx的多個程序可能跑在一個CPU上,可以分配不同的程序給不同的CPU處理,充分利用硬體多核多CPU

cat

/proc/cpuinfo | grep -c

"physical id"#檢視cpu核數

ps aux | grep nginx

#檢視nginx主程序中包含幾個子程序

worker_processes 與伺服器CPU數量相同或auto

#修改為cpu的總核數,一般情況不超過8個

worker_cpu_affinity

##工作程序靜態綁核
#將每個worker子程序與特定CPU物理核心繫結,提升cpu利用率,進而提升效能。避免同一個worker子程序在不同的CPU核心上切換或者多個程序跑在一個CPU上,快取失效,降低效能。

(7)配置Nginx實現網頁壓縮功能

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

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

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

gzip on; #開啟gzip壓縮功能

#實現網頁圖片的大小壓縮

http_image_filter_module是Nginx提供的整合圖片處理模組,可以用於即時縮放圖片,旋轉圖片,驗證圖片有效性以及獲取圖片寬高以及圖片型別資訊

yum install -y gd-devel

##yum線上源安裝gd-devel,http_image_filter_module模組需要依賴gd-devel的支援,重新編譯安裝啟動

./configure --prefix=/usr/local/nginx --user=nginx --

group

=nginx --

with

-http_stub_status_module --

with

-http_image_filter_module

make -j

2

&& make install

image_filter resize

200200

;

#按等比例縮小影像的寬或高至指定大小。如果只想設定一個維度,另一維可以指定為:“-”

#注:Nginx的Gzip壓縮功能雖然好用,但是下面兩類檔案資源不太建議啟用此壓縮功能。
1

)圖片/影片型別資源 原因:圖片如jpg、png檔案本身就會有壓縮,所以就算開啟gzip後,壓縮前和壓縮後大小沒有多大區別,所以開啟了反而會白白的浪費資源。

2

)大檔案資源 原因:會消耗大量的cpu資源,且不一定有明顯的效果。

(8)配置Nginx實現防盜鏈

在企業網站服務中,一般都要配置防盜鏈功能,以避免網站內容被非法盜用,造成經濟損失

Nginx防盜鏈功能也非常強大。預設情況下,只需要進行簡單的配置,即可實現防盜鏈處理
ewrite if ( $invalid_referer) {rewrite... }

~* \.(jpg|gif|swf)$ :這段正則表示式表示匹配不區分大小寫,以.jpg 或.gif 或.swf 結尾的檔案;

valid_referers :設定信任的網站,可以正常使用圖片;

none:允許沒有http_refer的請求訪問資源(根據Referer的定義,它的作用是指示一個請求是從哪裡連結過來的,如果直接在瀏覽器的位址列中輸入一個資源的URL地址,那麼這種請求是不會包含 Referer 欄位的),如 http://www.kgc.com/game.jpg

我們使用 http://www.kgc.com 訪問顯示的圖片,可以理解成 http://www.kgc.com/game.jpg 這個請求是從 http://www.kgc.com 這個連結過來的。

blocked:允許不是http://開頭的,不帶協議的請求訪問資源;

*.kgc.com:只允許來自指定域名的請求訪問資源,如 http://www.kgc.com

if

語句:如果連結的來源域名不在valid_referers所列出的列表中,

$invalid_referer

true

,則執行後面的操作,即進行重寫或返回 403 頁面。

(1)實驗演練

盜鏈網站主機(20.0.0.160)

Web源主機(20.0.0.150)

(9)nginx常用模組

http_stub_status_module 訪問狀態統計模組

http_gzip_module 網頁壓縮模組

http_rewrite_module URL地址重寫模組

http_ssl_module https安全加密模組

http_auth_basic_module 網頁使用者認證模組

http_fastcgi_module fastcgi轉發模組

http_image_filter_module 圖片處理模組

http_mp4/flv_module mp4/flv影片格式模組

http_limit_req_module 限制請求數模組

http_limit_conn_module 限制連線數模組

http_proxy_module 代理轉發模組

http_upstream_*_module 負載均衡模組

stream 四層代理轉發模組

連結:https://www.cnblogs.com/zsy828/p/18223841
(版權歸原作者所有,侵刪)

相關文章