天天看點

Nginx配置檔案

全局配置(user、worker_processes、error_log、pid)

user nobody;**

定義運作nginx服務的使用者,還可以加上組,如 user nobody nobody;

worker_processes 1;

定義nginx子程序數量,即提供服務的程序數量,該數值建議和服務cpu核數保持一緻。

除了可以定義數字外,還可以定義為auto,表示讓系統自動調整。

error_log logs/error.log;

定義錯誤日志的路徑,可以是相對路徑(相對prefix路徑的),也可以是絕對路徑。

該配置可以在此處定義,也可以定義到http、server、location裡

error_log logs/error.log notice;

定義錯誤日志路徑以及日志級别.

錯誤日志級别:常見的錯誤日志級别有[debug|info|notice|warn|error|crit|alert|emerg],級别越高記錄的資訊越少。

如果不定義預設是error

pid logs/nginx.pid;

定義nginx程序pid檔案所在路徑,可以是相對路徑,也可以是絕對路徑。

worker_rlimit_nofile 100000;

定義nginx最多打開檔案數限制。如果沒設定的話,這個值為作業系統(ulimit -n)的限制保持一緻。

把這個值設高,nginx就不會有“too many open files”問題了。

events配置部分

worker_connections 1024;

定義每個work_process同時開啟的最大連接配接數,即允許最多隻能有這麼多連接配接,大并發可以選擇2~5萬左右。

accept_mutex on;

當某一個時刻隻有一個網絡連接配接請求伺服器時,伺服器上有多個睡眠的程序會被同時叫醒,這樣會損耗一定的伺服器性能。

Nginx中的accept_mutex設定為on,将會對多個Nginx程序(worker processer)接收連接配接時進行序列化,防止多個程序争搶資源。

預設就是on。

multi_accept on;

nginx worker processer可以做到同時接收多個新到達的網絡連接配接,前提是把該參數設定為on。

預設為off,即每個worker process一次隻能接收一個新到達的網絡連接配接。

use epoll;

Nginx伺服器提供了多個事件驅動器模型來處理網絡消息,隻要知道nginx使用的是epoll就可以

其支援的類型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport。

select:隻能在Windows下使用,這個事件模型不建議在高負載的系統使用

poll:Nginx預設首選,但不是在所有系統下都可用

kqueue:這種方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系統中是最高效的

epoll: 這種方式是在Linux 2.6+核心中最高效的方式

rtsig:實時信号,可用在Linux 2.2.19的核心中,但不适用在高流量的系統中

/dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64 UNIX 5.1A+作業系統最高效的方式

eventport: Solaris 10最高效的方式

http配置項

MIME-Type

include mime.types; //cat conf/mime.types

定義nginx能識别的網絡資源媒體類型(如,文本、html、js、css、流媒體等)

default_type application/octet-stream;

定義預設的type,如果不定義改行,預設為text/plain.

log_format

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

其中main為日志格式的名字,後面的為nginx的内部變量組成的一串字元串。

access_log logs/access.log main;

定義日志的路徑以及采用的日志格式,該參數可以在server配置塊中定義。

sendfile on;

是否調用sendfile函數傳輸檔案,預設為off,使用sendfile函數傳輸,可以減少user mode和kernel mode的切換,進而提升伺服器性能。

對于普通應用設為 on,如果用來進行下載下傳等應用磁盤IO重負載應用,可設定為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。

sendfile_max_chunk 128k;

該參數限定Nginx worker process每次調用sendfile()函數傳輸資料的最大值,預設值為0,如果設定為0則無限制。

tcp_nopush on;

當tcp_nopush設定為on時,會調用tcp_cork方法進行資料傳輸。

使用該方法會産生這樣的效果:當應用程式産生資料時,核心不會立馬封裝包,而是當資料量積累到一定量時才會封裝,然後傳輸。這樣有助于解決網絡堵塞問題。

預設值為on。舉例:快遞員收快遞、發快遞,包裹累積到一定量才會發,節省運輸成本。

keepalive_timeout 65 60;

該參數有兩個值,第一個值設定nginx伺服器與用戶端會話結束後仍舊保持連接配接的最長時間,機關是秒,預設為75s。

第二個值可以省略,它是針對用戶端的浏覽器來設定的,可以通過curl -I看到header資訊中有一項Keep-Alive: timeout=60,如果不設定就沒有這一項。

第二個數值設定後,浏覽器就會根據這個數值決定何時主動關閉連接配接,Nginx伺服器就不操心了。但有的浏覽器并不認可該參數。

send_timeout

這個逾時時間是發送響應的逾時時間,即Nginx伺服器向用戶端發送了資料包,但用戶端一直沒有去接收這個資料包。

如果某個連接配接超過send_timeout定義的逾時時間,那麼Nginx将會關閉這個連接配接。

client_max_body_size 10m;

浏覽器在發送含有較大HTTP包體的請求時,其頭部會有一個Content-Length字段,client_max_body_size是用來限制Content-Length所示值的大小的。

這個限制包體的配置不用等Nginx接收完所有的HTTP包體,就可以告訴使用者請求過大不被接受。會傳回413狀态碼。

例如,使用者試圖上傳一個1GB的檔案,Nginx在收完標頭後,發現Content-Length超過client_max_body_size定義的值,

就直接發送413(Request Entity Too Large)響應給用戶端。

gzip on;

是否開啟gzip壓縮。

gzip_min_length 1k;

設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭得content-length中進行擷取。預設值是20。建議設定成大于1k的位元組數,小于1k可能會越壓越大。

gzip_buffers 4 16k;

設定系統擷取幾個機關的buffer用于存儲gzip的壓縮結果資料流。4 16k代表配置設定4個16k的buffer。

gzip_http_version 1.1;

用于識别 http 協定的版本,早期的浏覽器不支援 Gzip 壓縮,使用者會看到亂碼,是以為了支援前期版本加上了這個選項。

如果你用了Nginx反向代理并期望也啟用Gzip壓縮的話,由于末端通信是http/1.1,故請設定為 1.1。

gzip_comp_level 6;

gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)

gzip_types mime-type ... ;

比對mime類型進行壓縮,無論是否指定,”text/html”類型總是會被壓縮的。

在conf/mime.conf裡檢視對應的type。

示例:gzip_types text/plain application/x-javascript text/css text/html application/xml;

gzip_proxied any;

Nginx作為反向代理的時候啟用,決定開啟或者關閉後端伺服器傳回的結果是否壓縮,比對的前提是後端伺服器必須要傳回包含”Via”的 header頭。

以下為可用的值:

off - 關閉所有的代理結果資料的壓縮

expired - 啟用壓縮,如果header頭中包含 "Expires" 頭資訊

no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭資訊

no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭資訊

private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭資訊

no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭資訊

no_etag - 啟用壓縮 ,如果header頭中不包含 "ETag" 頭資訊

auth - 啟用壓縮 , 如果header頭中包含 "Authorization" 頭資訊

any - 無條件啟用壓縮

gzip_vary on;

和http頭有關系,會在響應頭加個 Vary: Accept-Encoding ,可以讓前端的緩存伺服器緩存經過gzip壓縮的頁面,例如,用Squid緩存經過Nginx壓縮的資料。

繼續閱讀