天天看點

【整理】Nginx 戰鬥準備 —— 優化指南

【一句話總結】 

本文不是一個全面的微調指南,而是讓你了解哪些設定能夠讓你在大量用戶端通路時擁有良好的性能,為什麼它們會提高性能。 

【知識點】 

worker_processes 定義了 nginx 對外提供 web 服務時的 worder 程序數。

worker_rlimit_nofile 更改 worker 程序的最大打開檔案數限制。

events 子產品中包含 nginx 中所有和處理連接配接相關的設定。

worker_connections 的值和 worker_rlimit_nofile 值有關系,該值的大小同時受限于系統可以使用的端口數目(~64k)。

multi_accept 告訴 nginx 在收到關于新連接配接的可讀通知後,應盡可能處理掉目前存在的所有來自用戶端的連接配接。

use 設定用于采用哪種 i/o 複用方式。

http 子產品控制着 nginx http 處理的所有核心特性。

server_tokens 并不會讓 nginx 執行的速度更快,但它可以關閉在錯誤頁面中的 nginx 版本數字,這樣對于安全性是有好處的。

sendfile 使能 sendfile() 的使用,在核心态完成相關動作,更高效。

tcp_nopush 告訴 nginx 在一個資料包裡發送所有 http 標頭,而不是通過 tcp 的 psh 方式一個一個發送。

tcp_nodelay 告訴 nginx 不要在發送小塊資料的時候進行緩存,而是将短小的資料片段即時發送出去。這個選項用于要求頻繁發送小資料片段,而不需要獲得即時回應的應用,因為對這種應用來說,即時投遞的能力才是必須的。

access_log 設定 nginx 是否将存儲通路日志。關閉這個選項可以讓讀取磁盤 i/o 操作更快(這個不太好關閉吧)。

error_log 告訴 nginx 隻能記錄嚴重的錯誤。

keepalive_timeout 給用戶端配置設定 keep-alive 連結逾時時間。伺服器将在這個逾時時間過後關閉連結。我們将它設定低些可以讓 ngnix 持續工作的時間更長。

client_header_timeout 和 client_body_timeout 設定在一定時間内沒有收到來自用戶端的請求的 header 或 body 部分則認為逾時。

reset_timeout_connection 告訴 nginx 在發生連接配接逾時後,通過向用戶端發送 rst 直接重置不響應的用戶端連接配接。這将會釋放那個用戶端所占有的記憶體空間(使用 rst 方式重置可能會有副作用)。

send_timeout 指定 nginx 發送響應的逾時時間,即 nginx 向用戶端發送了資料包,但用戶端一緻沒有處理該資料包的情況。該逾時時間不是指一個應答被完整傳輸的時間,而是用于限制兩次連續的用戶端側讀操作的時間間隔。

limit_conn_zone 用于設定共享記憶體區相關資訊。共享記憶體區中可以儲存各種 key 的狀态資訊(例如目前連接配接資料)。用法:limit_conn_zone $binary_remote_addr zone=addr:5m;

limit_conn 設定與指定 key 值關聯的連接配接數的最大值。用法:limit_conn addr 100; 表示每個 ip 位址上僅允許 100 個并發連接配接。

include 隻是一個在目前檔案中包含另一個檔案内容的指令。可以使用通配符 * 。

default_type 設定檔案使用的預設的 mime-type 。

charset 設定在 header 中攜帶的預設字元集。

gzip 設定 nginx 對發送的資料進行 gzip 壓縮。

gzip_disable 用于設定針對特定的用戶端不使用 gzip 壓縮。例如 gzip_disable "msie6"; 表示針對 ie6 不做 gzip 。

gzip_static 告訴 nginx 在對資源進行 gzip 壓縮前,通過名字查找是否已有預壓縮過的資源。這就允許你可以采用高壓縮比算法事先進行壓縮,而不用在請求時才執行 gzip 壓縮。

gzip_proxied allows or disallows compression of a response based on the request/response. we’ll set it to any, so we gzip all requests.

gzip_min_length 設定進行 gzip 壓縮時資料大小的位元組數下限。例如 gzip_min_length 1000; 表示當請求的大小低于 1000 位元組,将不采用 gzip 進行壓縮,因為畢竟 gzip 壓縮會拖慢請求處理程序。

gzip_comp_level 設定 gzip 壓縮級别。級别範圍 1~9,其中 9 是最高壓縮級别,但也是最慢的。一般設定中間值 4 比較好。

gzip_type 設定針對那些資料類型進行 gzip 壓縮的。例如

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

open_file_cache 啟用檔案緩存,同時可以指定在該緩存中可以存儲的元素的最大個數,以及淘汰時間。

open_file_cache_valid 設定檢驗緩存中元素有效性的頻率。

open_file_cache_min_uses 與 open_file_cache 中的 inactive 參數配合使用。如果在 inactive 指定時間内,通路次數超過 open_file_cache_min_uses 指定的值,則不會淘汰出緩存。

open_file_cache_errors 設定是否緩存打開、查找檔案錯誤的資訊。

<a href="http://my.oschina.net/moooofly/blog/228765#">?</a>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<code>user www-data;</code>

<code>pid</code><code>/var/run/nginx</code><code>.pid;</code>

<code>worker_processes auto;</code>

<code>worker_rlimit_nofile 100000;</code>

<code>events {</code>

<code>    </code><code>worker_connections 2048;</code>

<code>    </code><code>multi_accept on;</code>

<code>    </code><code>use epoll;</code>

<code>}</code>

<code>http {</code>

<code>    </code><code>server_tokens off;</code>

<code>    </code><code>sendfile on;</code>

<code>    </code><code>tcp_nopush on;</code>

<code>    </code><code>tcp_nodelay on;</code>

<code>    </code><code>access_log off;</code>

<code>    </code><code>error_log</code><code>/var/log/nginx/error</code><code>.log crit;</code>

<code>    </code><code>keepalive_timeout 10;</code>

<code>    </code><code>client_header_timeout 10;</code>

<code>    </code><code>client_body_timeout 10;</code>

<code>    </code><code>reset_timedout_connection on;</code>

<code>    </code><code>send_timeout 10;</code>

<code>    </code><code>limit_conn_zone $binary_remote_addr zone=addr:5m;</code>

<code>    </code><code>limit_conn addr 100;</code>

<code>    </code><code>include</code><code>/etc/nginx/mime</code><code>.types;</code>

<code>    </code><code>default_type text</code><code>/html</code><code>;</code>

<code>    </code><code>charset utf-8;</code>

<code>    </code><code>gzip</code> <code>on;</code>

<code>    </code><code>gzip_disable</code><code>"msie6"</code><code>;</code>

<code>    </code><code>gzip_proxied any;</code>

<code>    </code><code>gzip_min_length 1000;</code>

<code>    </code><code>gzip_comp_level 6;</code>

<code>    </code><code>gzip_types text</code><code>/plain</code> <code>text</code><code>/css</code> <code>application</code><code>/json</code> <code>application</code><code>/x-javascript</code> <code>text</code><code>/xml</code> <code>application</code><code>/xml</code> <code>application</code><code>/xml</code><code>+rss text</code><code>/javascript</code><code>;</code>

<code>    </code><code>open_file_cache max=100000 inactive=20s;</code>

<code>    </code><code>open_file_cache_valid 30s;</code>

<code>    </code><code>open_file_cache_min_uses 2;</code>

<code>    </code><code>open_file_cache_errors on;</code>

<code>    </code><code>include</code><code>/etc/nginx/conf</code><code>.d/*.conf;</code>

<code>    </code><code>include</code><code>/etc/nginx/sites-enabled/</code><code>*;</code>

繼續閱讀