- 1.Nginx服務最佳化
- (1)配置Nginx隱藏版本號
- (2)修改Nginx使用者與組
- (3)配置Nginx網頁快取時間
- (4)實現Nginx的日誌切割
- (5)配置Nginx實現連線超時
- (6)更改Nginx執行程序數
- (7)配置Nginx實現網頁壓縮功能
- (8)配置Nginx實現防盜鏈
- (1)實驗演練
- (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(status time):
當修改檔案的許可權或者屬性的時候,就會更新這個時間,ctime並不是create time,更像是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 200 200; #按等比例縮小影像的寬或高至指定大小。如果只想設定一個維度,另一維可以指定為:“-”
#注: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 四層代理轉發模組