[Nginx] – 性能優化 – 配置文件優化


Nginx基本安全優化

1.調整參數隱藏Nginx版本號信息
    一般來說,軟件的漏洞都和版本有關,因此我們應盡量隱藏或清除Web服務隊訪問的用戶顯示各類敏感信息(例如:Web軟件名稱及版本號等信息),這樣惡意的用戶就很難猜到他攻擊的服務器所用的是否是特定漏洞的軟件,或者是否有對應的漏洞存在。
 
修改Nginx版本信息
[root@web02 ~]# vim /application/nginx/conf/nginx.conf http{ server_tokens off; }

 

#我們在http標簽端開啟即可

沒修改之前
[root@web02 ~]# curl -I blog.etiantian.org HTTP/1.1 200 OK Server: nginx/1.6.3 Date: Mon, 30 May 2016 11:17:14 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.5.32 Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"

 

修改后結果(需要重啟生效)
[root@web02 ~]# curl -I blog.etiantian.org HTTP/1.1 200 OK Server: nginx Date: Mon, 30 May 2016 11:21:33 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.5.32 Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"
 
修改為后瀏覽器訪問404界面也不會出現版本信息

 

server_tokens參數的官方說明如下:
syntax    server_tokens on|off;   #此行為參數語法,on為開啟,off為關閉
default    server_tokens on;        #此行意思是不配置該參數,軟件默認情況的結果
context    http,server,location    #此行為server_tokens參數可以放置的位置
參數作用:激活或禁止Nginx的版本信息顯示在報錯信息里以及server的響應首部位置
Enables or disables emitting of nginx version in error messages and in the Server response header field   #此行是參數的作用原文
 

2.更改源碼隱藏Nginx軟件名及版本號

    隱藏了Nginx版本號后,更進一步,可以通過一些手段把web服務軟件的名稱也給因此,或者更改為其他Web服務軟件名迷惑黑客。Nginx模塊不支持更改軟件名,所以我們需要更改Nginx源代碼才能解決。
 
1.第一步是一次修改3個Nginx源碼文件
修改的第一個文件為nginx-1.6.3/src/core/nginx.h
[root@web02 ~]# cd /home/oldboy/tools/nginx-1.6.3/src/core/ [root@web02 core]# vim nginx.h #define NGINX_VERSION      "9.9.9"    #修改為想要的版本號;前面得“#”號不可去掉,直接修改即可,否則,編譯得時候會提示nginx.h文件有錯誤。 #define NGINX_VER          "ABCDOCKER/" NGINX_VERSION #將nginx修改想要修改的軟件名稱 #define NGINX_VAR          "ABCDOCKER" #將nginx修改為想要修改的軟件名稱。 #define NGX_OLDPID_EXT     ".oldbin"
 

 

2.第二步修改nginx-1.6.3/src/http/ngx_http_header_filter_module.c的第49行
[root@web02 nginx-1.6.3]# vim src/http/ngx_http_header_filter_module.c static char ngx_http_server_string[] = "Server: ABCDOCKER" CRLF; #修改本行,此處的文件是我們Curl 出來顯示的名稱
 
3.第三步修改nginx-1.6.3/src/http/ngx_http_special_response.c,對外頁面報錯時,它會控制是否展示敏感信息。修改28~30行
[root@web02 nginx-1.6.3]# vim src/http/ngx_http_special_response.c 21 static u_char ngx_http_error_full_tail[] =
 22 "<hr><center>"ABC(www.abcdocker.com)"</center>" CRLF 23 "</body>" CRLF 24 "</html>" CRLF 25 ; 26 
 27 
 28 static u_char ngx_http_error_tail[] =
 29 "<hr><center>ABC(www.abcdocker.com)</center>" CRLF 30 "</body>" CRLF 31 "</html>" CRLF

 

 

 修改完成之后需要重新編譯nginx
查看原來編譯的參數
[root@web02 nginx-1.6.3]# /application/nginx/sbin/nginx -V nginx version: nginx/1.6.3 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) TLS SNI support enabled configure arguments: --prefix=/application/nginx-1.6.3/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module [root@web02 nginx-1.6.3]# ./configure --prefix=/application/nginx-1.6.3/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module

提示:需要停止原來的nginx,從新進行編譯。如果不想在覆蓋原來的編譯參數可以選擇指定新的目錄。
提示:最后還需要make  ;make  install 才會生效
 
測試:需要開啟nginx
[root@web02 application]# curl -I blog.etiantian.org HTTP/1.1 200 OK Server: ABCDOCKER Date: Mon, 30 May 2016 12:07:19 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.5.32 Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"

 

因為我優化了,所以Server:后面除了我設置的字母不會顯示版本信息,修改配置文件server_tokens off;  修改為on即可
    重啟nginx
[root@web02 application]# curl -I blog.etiantian.org HTTP/1.1 200 OK Server: ABCDOCKER/9.9.9 Date: Mon, 30 May 2016 12:09:05 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.5.32 Link: <http://blog.etiantian.org/?rest_route=/>; rel="https://api.w.org/"

 

  關閉server_tokens off;  可以顯示我們設置的錯誤
 

 

 說明:
1.提示網站安全,要從最簡單、最短板、最低點入手解決問題,門大開着,窗戶安裝再結實的護欄也沒有意義。
2.向有經驗的人及優秀的網站公司學習。
3.學習看官方文檔,根據一手資料去分析
4.命令輸出結果中含有需要過濾或者要保留的內容時,命令自身可能有參數直接實現。
 

3.更改Nginx服務的默認用戶

    為了Web服務更安全,我們要盡可能地改掉軟件默認的所有配置,包括端口、用戶等。
查看nginx服務對應的默認用戶,查看默認配置文件
[root@web02 ~]# grep "#user" /application/nginx/conf/nginx.conf.default 
#user  nobody;
    為了防止黑客猜到這個Web服務用戶,我們需要更改成特殊的用戶名,但這個用戶必須是系統事先存在的
(1)為Nginx服務建立新用戶
[root@web02 ~]# useradd nginx -s /sbin/nologin -M
[root@web02 ~]# id nginx
(2)配置Nginx服務,讓其使用剛建立的nginx用戶
更改ningx服務默認使用的用戶方法有兩種:
第一種為直接更改配置文件參數,將默認的#user nobody修改如下內容
user nginx nginx;
#在http標簽即可
如果注釋或不設置上述參數,默認即是nobody用戶,不推薦使用。最好采用一個普通用戶
第二種為直接在編譯nginx軟件時指定編譯的用戶和組
./configure --prefix=/application/nginx-1.6.3/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
提示:前文在編譯nginx服務時,就是這樣帶着參數,因此配置文件中加不加參數默認都是nginx用戶了。
 
    通過上述修改后Nginx進程,可以看到worker processes進程對應的用戶都變成了nginx

4.優化Nginx服務的worker進程個數

    在高並發、訪問量的Web服務場景,需要事先啟動好更多的nginx進程,以保證快速響應並處理大量並發用戶的請求.
 
優化Nginx進程對應nginx服務的配置參數如下:
worker_processes  1;
    上述參數調整的是Nginx服務的Worker進程數,Nginx有Master進程和Worker進程之分,Master為管理進程,worker是工作進程
 
下面介紹Linux服務CPU總核數的方法
[abcdocker@web02 ~]$ grep "processor" /proc/cpuinfo |wc -l
1
[abcdocker@web02 ~]$ grep -c processor /proc/cpuinfo 
1
#此處的1表示1顆1核的CPU
查看cpu總顆數
[abcdocker@web02 ~]$ grep "pysical id" /proc/cpuinfo |sort|uniq|wc -l
1  #對phsical id 去重計算,表示1顆CPU
執行top命令,然后按數字1,即可顯示所有的cpu核數,如下

 

 單核CPU顯示如下:

 

 有關worker_process參數的官方說明如下:
syntax: worker_processes number:#此行為參數語法,number為數量 default:    worker_processes 1 #此行意思是不配置該參數,軟件默認情況為1 context: main #此行為worker_processes參數可以放置的位置 worker_processes為定義worker進程數的數量,建議設置為CPU的核數或者cpu核數*2的進程數,具體情況要根據實際業務來進行選擇。除了要和CPU核數的匹配外,和硬盤存儲的數據以及系統的負載也會有關,設置為CPU的個數或核數是一個好的起始配置
 

5.優化綁定不同的Nginx進程到不同CPU上

    默認情況Nginx的多個進程有可能跑在某一個或某一核的CPU上,導致Nginx進程使用硬件的資源不均。可以分配不同的Nginx進程給不同的CPU處理,達到充分有效利用硬件的多CPU多核資源的目的。
worker_processes  1;
worker_cpu_affinity 0001 0010 0100 1000;
#worker_cpu_affinity就是配置nginx進程CPU親和力的參數,即把不同的進程分給不同的CPU處理。這里0001 0010 0100 1000是掩碼,分別代表1、2、3、4核cpu核心,
由於worker_processes進程數為4,因此上述配置會把每個進程分配一核CPU處理,默認情況下進程不會綁定任何CPU,參數位置為main段

 

 worker_cpu_affinity參數的官方說明如下:
syntax    worker_cpu_affinity cpumask.....#此行為cpu親和力參數語法,cpumaskcpu掩碼
default    ---                                            #默認不配置
context    main                            #此行為worker_cpu_affinty參數可以放置的位置
    worker_cpu_affinity的作用是綁定不同的worker進程到一組CPU上。通過設置bitmask控制允許使用的CPUS,默認worker進程不會綁定到任何CPUS。
 
參考:
worker_processes    4; worker_cpu_affinity 0001 0010 0100 1000; binds each worker process to a separate CPU, while worker_processes 2; worker_cpu_affinity 0101 1010; binds the first worker process to CPU0/CPU2, and the second worker process to CPU1/CPU3. The second example is suitable for hyper-threading.The directive is only available on FreeBSD and Linux. From : http://nginx.org/en/docs/ngx_core_module.html by oldboy 

 

 

     通過觀察,我們發現配置后不同CPU的使用率相對平均,和測試前變化不大。可能是Nginx軟件本身在逐漸變化,使其使用多核CPU時更為均衡。
 另外(taskset - retrieve or set a process’s CPU affinity)命令本身也有分配CPU的功能,(例如:taskset -c 1,2,3 /etc/init.d/mysqld start)。
 

 6.Nginx事件處理模型優化

    Nginx的連接處理機制在於不同的操作系統會采用不同的I/O模型,在Linux下,Nginx使用epoll的I/O多路復用模型,在Freebsd中使用kqueue的I/O多路復用模型,在Solaris中使用/dev/poll方式的I/O多路復用模型,在Windows使用的是icop,等待。
    要根據系統類型選擇不同的事件處理模型,可供使用的選擇的有“use [kqueue|rtsig|epoll|/dev/poll|select|pokk]”。
企業面試題Nginx epool和apache select有什么區別?
宿管大媽的例子
 
具體配置如下:
events {
#events指令是設定Nginx的工作模式及連接數上限
use epoll
}
#use是個事件模塊指定,用來指定Nginx的工作模式,Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標准的工作迷失,kqueue和epoll是高效工作模式,不同的是epoll用在Linux平台,而kqueue用在BSD系統中。對於Linux 2.6內核推薦使用epoll工作模式
根據Nginx的官方文檔建議,也可以不指定事件處理模型,Nginx會自動選擇最佳的事件處理模型服務。
 

7.調整Nginx單個進程允許的客戶端最大連接數

    調整Nginx單個進程允許客戶端的最大連接數,這個控制連接數的參數為
    worker_connections  1024;
worker_connections的值要根據具體服務器性能和程序的內存使用量來指定(一個進程啟動使用的內存根據程序確定)
events {
    worker_connections  20480;
}
#worker_connections 也是個事件模塊指令,用於定義Nginx每個進程的最大連接數,默認是1024.最大客戶端連接數由worker_processes和worker_connections決定.
 並發=worker_process * worker_connections 
參考資料:http:nginx.org/en/docs/ngx_core_module.html
 

8.配置Nginx worker進程最大打開文件數

    Nginx worker進程的最大打開文件數,這個控制連接數的參數為worker_rlimit_nofile。
worker_rlimit_nofile 65535
#最大打開文件數,可設置為系統優化有的ulimit-HSn的結果。
worker_rlimit_nofile number的官方說明如下:
參數語法:worker_rlimit_nofile number;
默認配置:無
放置位置:主標簽段
注意放置位置最好在配置文件前幾行位置
說明:此參數的作用是改變worker processes能打開的最大文件數。
 

9.開啟高效文件傳輸模式

1.設置參數:sendfile on;
    sendfile參數用於開啟文件的高效傳輸模式,同時將tcp_nopush和tcp_nodelay兩個指定設為on,可防止網絡及磁盤I/O阻塞,提升Nginx工作效率。
 
官方說明:
syntax    sendfile on|off  #參數語法
default    sendfile off    #參數默認大小
context    httpserverlocationif in location #可放置的標簽段
參數作用:激活或者禁用sendfile()功能。sendfile()是作用於兩個文件描述符之間的數據拷貝函數,這個拷貝操作是在內核之中,被稱為“零拷貝”,sendfile()和read和write函數要高效很多,因為read和wrtie函數要把數據拷貝到應用層再進行操作。相關控制參數還有sendfile_max_chunk。
http://nginx.org/en/docs/http/ngx_http_core_module.html#sendfile
 
2.設置參數:tcp_nopush on;
Syntax: tcp_nopush on | off;  #參數語法
Default: tcp_nopush off;      #參數默認大小
Context: http, server, location  #可以放置標簽段
參數作用:激活或禁用Linux上的TCP_CORK socker選項,此選項僅僅開啟sendfile時才生效,激活這個tcp_nopush參數可以運行把http response header和文件的開始放在一個文件里發布,減少網絡報文段的數量。
 
3.設置參數:tcp_nodelay on;
    用於激活tcp_nodelay功能,提高I/O性能
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location
參數作用:默認情況下數據發送時,內核並不會馬上發送,可能會等待更多的字節組成一個數據包,這樣可以提高I/O性能,但是,在每次只發送很少字節的業務場景,使用tcp_nodelay功能,等待時間會比較長。
   參數生產條件:激活或禁用tcp_nodelay選項,當一個連接進入到keep-alive狀態時生效
 

10.優化Nginx連接參數調整連接超時時間

1、什么是連接超時?
    這里的服務員相當於Nginx服務建立的連接,當服務器建立的連接沒有接收到處理請求時,可在指定的事件內就讓它超時自動退出。還有當Nginx和fastcgi服務建立連接請求PHP時,如果因為一些原因(負載高、停止響應)fastcgi服務無法給Nginx返回數據,此時可以通過配置Nginx服務參數使其不會四等。例如:可設置如果Fastcgi 10秒內不能返回數據,那么Nginx就終端本次請求。
 
2、連接超時的作用
1)設置將無用的連接盡快超時,可以保護服務器的系統資源(CPU、內存、磁盤)
2)當連接很多時,及時斷掉那些已經建立好的但又長時間不做事的連接,以減少其占用的服務器資源,因為服務器維護連接也是消耗資源的。
3)有時黑客或而惡意用戶攻擊網站,就會不斷和服務器建立多個連接,消耗連接數,但是什么也不操作。只是持續建立連接,這就會大量的消耗服務器的資源,此時就應該及時斷掉這些惡意占用資源的連接。
4)LNMP環境中,如果用戶請求了動態服務,則Nginx就會建立連接請求fastcgi服務以及MySQL服務,此時這個Nginx連接就要設定一個超時時間,在用戶容忍的時間內返回數據,或者再多等一會后端服務返回數據,具體策略要看業務。
 
3.連接超時帶來的問題以及不同程序連接設定知識
    服務器建立新連接也是要消耗資源的,因此,超時設置的太短而並發很大,就會導致服務器瞬間無法響應用戶的請求,導致體驗下降。
    企業生產有些PHP程序站點就會系統設置短連接,因為PHP程序建立連接消耗的資源和時間相對要少些。而對於java程序站點一般建議設置長連接,因為java程序建立消耗的資源和時間更多。
 
4.Nginx連接超時的參數設置
 
(1)設置參數:keeplived_timeout 60;
    用於設置客戶端連接保持會話的超時時間為60秒。超過這個時間,服務器會關閉該連接,此數值為參考值。
Syntax: keepalive_timeout timeout [header_timeout]; #參數語法
Default: keepalive_timeout 75s; #參數默認大小
Context: http, server, location #可以放置的標簽段
    參數作用:keep-alive可以使客戶端到服務端已經建立的連接一直工作不退出,當服務器有持續請求時,keep-alive會使用正在建立的連接提供服務,從而避免服務器重新建立新連接處理請求。
 
(2)設置參數:client_header_timeout 15;
用於設置讀取客戶端請求頭數據的超時時間,此處的數值15單位是秒。
Syntax:  client_header_timeout time;
Default:  client_header_timeout 60s;
Context:  http, server
參數作用:設置讀取客戶端請求頭數據的超時時間。如果超過這個時間,客戶端還沒有發送完整的header數據,服務端將數據返回“Request time out (408)”錯誤。
 
(3)設置參數:client_body_timeout 15;
用於設置讀取客戶端請求主體的超時時間,默認值是60
Syntax: client_body_timeout time;
Default: client_body_timeout 60s;
Context: http, server, location
參數作用:設置讀取客戶端請求主體的超時時間。這個超時僅僅為兩次成功的讀取操作之間的一個超時,非請求整個主體數據的超時時間,如果在這個超時時間內,客戶端沒有發送任何數據,Nginx將返回“Request time out(408)”錯誤,默認值是60.
 
(4)設置參數:send_timeout 25;
    用戶指定響應客戶端的超時時間。這個超時時間僅限於兩個鏈接活動之間的事件,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連接,默認值為60s,可以改為參考值25s
Syntax: send_timeout time;
Default: send_timeout 60s;
Context: http, server, location
參數作用:設置服務器端傳送http響應信息到客戶端的超時時間,這個超時時間僅僅為兩次成功握手后的一個超時,非請求整個響應數據的超時時間,如在這個超時時間內,客戶端沒有收到任何數據,連接將被關閉。

 

 操作步驟
一般放在http標簽即可 http { sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; server_names_hash_bucket_size 128; server_names_hash_max_size 512; keepalive_timeout 65; client_header_timeout 15s; client_body_timeout 15s; send_timeout 60s; }
 
配置參數介紹如下:
keeplived_timeout 60;
###設置客戶端連接保持會話的超時時間,超過這個時間,服務器會關閉該連接。
tcp_nodelay on;
####打開tcp_nodelay,在包含了keepalive參數才有效
client_header_timeout 15;
####設置客戶端請求頭讀取超時時間,如果超過這個時間,客戶端還沒有發送任何數據,Nginx將返回“Request time out(408)”錯誤
client_body_timeout 15;
####設置客戶端請求主體讀取超時時間,如果超過這個時間,客戶端還沒有發送任何數據,Nginx將返回“Request time out(408)”錯誤
send_timeout 15;
####指定響應客戶端的超時時間。這個超過僅限於兩個連接活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連接。
 
優化服務器域名的bash表大小
    哈希表和監聽端口關聯,每個端口都是最多關聯到三張表:確切名字的哈希表,以星號起始的通配符名字的哈希表和以星號結束的統配符名字的哈希表。哈希表的尺寸在配置階段進行了優化,可以以最小的CPU緩存命中率失敗來找到名字。Nginx首先會搜索確切名字的哈希表,如果沒有找到,則搜索以星號起始的通配符名稱的哈希表,如果還是沒有找到,繼續搜索以星號結束的通配符名字的哈希表。
    注意.nginx.org存儲在通配符名字的哈希表中,而不在明確名字的哈希表中,由於正則表達式是一個個串行測試的,因此該方式也是最慢的,並且不可擴展。
 
舉個例子,如果Nginx.org和www.nginx.org來訪問服務器最頻繁,那么明確的定義出來更為有效
 
 server { listen 80; server_name nginx.org www.nginx.org *.nginx.org location / { root html/www; index index.php index.html index.htm; }
 
server_names_hash_bucket_size size的值,具體信息如下
server_names_hash_bucket_size size 512
#默認是512KB 一般要看系統給出確切的值。這里一般是cpu L1的4-5倍
 
官方說明:
Syntax: server_names_hash_bucket_size size;
Default: server_names_hash_bucket_size 32|64|128;
Context: http
參數作用:設置存放域名(server names)的最大哈希表大小。
 
 

11.上傳文件大小(http Request body size)的限制(動態應用)

設置上傳文件大小需要在nginx的主配置文件加入如下參數
client_max_body_size 8m;
    具體大小根據公司的業務調整,如果不清楚設置為8m即可
Syntax: client_max_body_size size;
Default: client_max_body_size 1m;  #默認值是1m
Context: http, server, location
參數作用:設置最大的允許客戶端請求主體大小,在請求頭域有“Content-Length”,如果超過了此配置值,客戶端會收到413錯誤,意思是請求的條目過大,有可能瀏覽器不能正確的顯示這個錯誤,設置為0表示禁止檢查客戶端請求主體大小,此參數對服務端的安全有一定的作用。

12.fastcgi相關參數調優(配合PHP引擎動態服務)

    fastcgi參數是配合nginx向后請求PHP動態引擎服務的相關參數

 

Nginx Fastcgi常見參數列表說明
Nginx Fastcgi相關參數 說明
fastcgi_connect_timeout 表示nginx服務器和后端FastCGI服務器連接的超時時間,默認值為60s,這個參數通常不要超過75s,因為建立的連接越多消耗的資源就越多
fastcgi_send_timeout 設置nginx允許FastCGI服務返回數據的超時時間,即在規定時間之內后端服務器必須傳完所有的數據,否則,nginx將斷開這個連接,默認值為60s
fastcgi_read_timeout 設置Nginx從FastCGI服務端讀取響應信息的超時時間。表示建立連接成功后,nginx等待后端服務器的響應時間,是nginx已經進入后端的排隊之中等候處理的時間
fastcgi_buffer_size 這是nginx fastcgi的緩沖區大小參數,設定用來讀取FastCGI服務端收到的第一部分響應信息的緩沖區大小,這里的第一部分通常會包含一個小的響應頭部,默認情況,這個參數大小是由fastcgi_buffers指定的一個緩沖區的大小
fastcgi_buffers 設定用來讀取從FastCGI服務端收到的響應信息的緩沖區大小以及緩沖區數量。默認值fastcgi_buffers 8 4|8k;
指定本地需要用多少和多大的緩沖區來緩沖FastCGI的應答請求。如果一個PHP腳本所產生的頁面大小為256lb,那么會為其分配4個64kb的緩存區用來緩存。如果站點大部分腳本所產生的頁面大小為256kb,那么可以把這個值設置為“16 16k”、“464k”等
fastcgi_busy_buffers_size 用於設置系統很忙時可以使用fastcgi_buffers大小,官方推薦的大小為fastcgi_buffers*2
默認fastcgi_busy_buffers_size 8k|16k
fastcgi_temp_file_write_size fastcgi臨時文件的大小,可設置128-256k
fastcgi_cache oldboy_nginx 表示開啟FastCGI緩存並為其指定一個名稱。開啟緩存非常有用,可以有效降低CPU的負載,並且防止502錯誤的發送,但是開啟緩存也會引起其他問題,要根據具體情況選擇。
fastcgi_cache_path

 

fastcgi_cache緩存目錄,可以設置目錄哈希層級。比如2:2會生成256*256個子目錄,keys_zene是這個緩存空間的名字,cache是用多少內存(這樣熱門的內容nginx直接放入內存,提高訪問速度),inactive表示默認失效時間,max_size表示最多用多少硬盤空間,需要注意的是fastcgi_cache緩存是先卸載fastcgi_temp_path再移到fastcgi_cache_path。所以這兩個目錄最好在同一個分區
fastcgi_cache_vaild 示例:

 

fastcgi_cache_valid 2000 302 1h;
用來指定應答代碼的緩存時間,實例中的值將200和302應答緩存一個小時
示例:fastcgi_cache_valid 301 1d;
將304應該緩存1天。
還可以設置緩存1分鍾(1m)
fastcgi_cache_min_user
示例:fastcgi_cache_min_user 1;
設置請求幾次之后響應將被緩存。
fastcgi_cache_user_stale
示例:fastcgi_cache_use_stale error timeout invaild_header http_500;
定義那些情況下用過期緩存
fastcgi_cache_key 示例:fastcgi_cache_key $request_method://$host$request_uri;
fastcgi_cache_key http://$host$request_uri;

 

定義fastcgi_cache的key,示例中就以請求的URI作為緩存的key,nginx會取這個key的md5作為緩存文件,如果設置了緩存哈希目錄,Nginx會從后往前取響應的位置作為目錄。注意一定要加上$request_method作為cache key,否則如果HEAD類型的先請求會導致后面的GET請求返回為空

 
 
PHP 優化設置:
在http{}里面 fastcgi_connect_timeout 240; fastcgi_send_timeout 240; fastcgi_read_timeout 240; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #fastcgi_temp_path /data/ngx_fcgi_tmp; 需要有路徑 fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g; PHP緩存 可以配置在server標簽和http標簽 fastcgi_cache ngx_fcgi_cache; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_cache_key http://$host$request_uri;
 

 

 2個模塊地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM