nginx的配置文件默認在nginx安裝目錄中的conf子目錄中,主配置文件爲nginx.conf,
root@mgmserver conf]# pwd
/usr/local/nginx/conf
1、配置文件
[root@mgmserver conf]# vi nginx.conf
1
2 #user nobody; #指定運行的用戶和組;
3 worker_processes 1; #工做進程數,通常與CPU核數相同或是2倍;
4#指定全局錯誤日誌的路徑,錯誤日誌可選項 有[debug|info|notice|warn|error|crit]
5 #error_log logs/error.log;
6 #error_log logs/error.log notice;
7 #error_log logs/error.log info;
8
9 #pid logs/nginx.pid; #指定pid文件存放的路徑
10
11
12 events {
use epoll;使用的網絡I/O模式,LINUX下使用epoll模型;freebsd使用kqueue模型;在events 這裏,默認的是否是沒有設置使用的模型;若是要使用epoll 模型要在安裝時帶上--with-poll_module=epoll;
13 worker_connections 1024; #容許的鏈接數;
14 }
15
16#設定http服務器,利用它的反向代理功能提供負載均衡支持;
17 http {
18 include mime.types; #設定mime類型;
19 default_type application/octet-stream;
20#設置日誌格式
21 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
22 # '$status $body_bytes_sent "$http_referer" '
23 # '"$http_user_agent" "$http_x_forwarded_for"';
24
25 #access_log logs/access.log main;
26
27 sendfile on; #默認開啓sendfile,sendfile能有效提升web傳輸文件的效率,nginx會自動使用
28 #tcp_nopush on; #容許或禁止使用socket的tcp_nopush(on freebsd)或tcp_cork(on linux)選項,這個選項僅僅使用sendfile的時候能夠用。
tcp_nodelay on;
轉帖自:http://blog.phpwap.net/?p=14對TCP_NODELAY 和 TCP_CORK的解釋,
這兩個選項都對網絡鏈接的行爲具備重要的做用。許多UNIX系統都實現了 TCP_NODELAY選項,可是,TCP_CORK則是Linux系統所獨有的 並且相對較新;它首先在內核版本2.4上得以實現。此外,其餘UNIX系統版本也有功能相似的選項,值得注意的是,在某種由BSD派生的系統上的 TCP_NOPUSH選項其實就是TCP_CORK的一部分具體實現。
TCP_NODELAY和TCP_CORK基本上控制了包的「Nagle 化」,Nagle化在這裏的含義是採用Nagle算法把較小的
包組裝爲更大的幀。 John Nagle是Nagle算法的發明人,後者就是用他的名字來命名的,他在1984年首次用這種方法來嘗試解決福特汽車公司的網絡擁塞問題(欲瞭解詳情請參 看IETF RFC 896)。他解決的問題就是所謂的silly window syndrome ,中文稱「愚蠢窗口症候羣」,具體含義是,由於廣泛終端應用程序每產生一次擊鍵操做就會發送一個包,而典型狀況下一個包會擁有一個字節的數據載荷以及40 個字節長的包頭,因而產生4000%的過載,很輕易地就能令網絡發生擁塞,。 Nagle化後來成了一種標準而且當即在因特網上得以實現。它如今已經成爲缺省配置了,但在咱們看來,有些場合下把這一選項關掉也是合乎須要的。
如今讓咱們假設某個應用程序發出了一個請求,但願發送小塊數據。咱們能夠選擇當即發送數據或者等待產生更多的數據而後再一次發送兩種策略。若是咱們立刻發 送數據,那麼交互性的以及客戶/服務器型的應用程序將極大地受益。例如,當咱們正在發送一個較短的請求而且等候較大的響應時,相關過載與傳輸的數據總量相 比就會比較低,並且,若是請求當即發出那麼響應時間也會快一些。以上操做能夠經過設置套接字的TCP_NODELAY選項來完成,這樣就禁用了Nagle 算法。
另一種狀況則須要咱們等到數據量達到最大時才經過網絡一次發送所有數據,這種數據傳輸方式有益於大量數據的通訊性能,典型的應用就是文件服務器。應用 Nagle算法在這種狀況下就會產生問題。可是,若是你正在發送大量數據,你能夠設置TCP_CORK選項禁用Nagle化,其方式正好同 TCP_NODELAY相反(TCP_CORK 和 TCP_NODELAY 是互相排斥的)。下面就讓咱們仔細分析下其工做原理。
假設應用程序使用sendfile()函數來轉移大量數據。應用協議一般要求發送某些信息來預先解釋數據,這些信息其實就是報頭內容。典型狀況下報頭很 小,並且套接字上設置了TCP_NODELAY。有報頭的包將被當即傳輸,在某些狀況下(取決於內部的包計數器),由於這個包成功地被對方收到後須要請求 對方確認。這樣,大量數據的傳輸就會被推遲並且產生了沒必要要的網絡流量交換。
可是,若是咱們在套接字上設置了TCP_CORK(能夠比喻爲在管道上插入「塞子」)選項,具備報頭的包就會填補大量的數據,全部的數據都根據大小自動地 經過包傳輸出去。當數據傳輸完成時,最好取消TCP_CORK 選項設置給鏈接「拔去塞子」以便任一部分的幀都能發送出去。這同「塞住」網絡鏈接同等重要。
總而言之,若是你確定能一塊兒發送多個數據集合(例如HTTP響應的頭和正文),那麼咱們建議你設置TCP_CORK選項,這樣在這些數據之間不存在延遲。能極大地有益於WWW、FTP以及文件服務器的性能,同時也簡化了你的工做。示例代碼以下:
intfd, on = 1;
…
/* 此處是建立套接字等操做,出於篇幅的考慮省略*/
…
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* cork */
write (fd, …);
fprintf (fd, …);
sendfile (fd, …);
write (fd, …);
sendfile (fd, …);
…
on = 0;
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* 拔去塞子 */
不幸的是,許多經常使用的程序並無考慮到以上問題。例如,Eric Allman編寫的sendmail就沒有對其套接字設置任何選項。
Apache HTTPD是因特網上最流行的Web服務器,它的全部套接字就都設置了TCP_NODELAY選項,並且其性能也深受大多數用戶的滿意。這是爲何呢?答 案就在於實現的差異之上。由BSD衍生的TCP/IP協議棧(值得注意的是FreeBSD)在這種情況下的操做就不一樣。當在TCP_NODELAY 模式下提交大量小數據塊傳輸時,大量信息將按照一次write()函數調用發送一塊數據的方式發送出去。然而,由於負責請求交付確認的記數器是面向字節而 非面向包(在Linux上)的,因此引入延遲的機率就下降了不少。結果僅僅和所有數據的大小有關係。而 Linux 在第一包到達以後就要求確認,FreeBSD則在進行如此操做以前會等待好幾百個包。
在Linux系統上,TCP_NODELAY的效果同習慣於BSD TCP/IP協議棧的開發者所指望的效果有很大不一樣,並且在Linux上的Apache性能表現也會更差些。其餘在Linux上頻繁採用TCP_NODELAY的應用程序也有一樣的問題。
#設定請求緩衝;
client_header_buffer_size 1k;
large_client_header_size 50k;
#設定客戶端可以上傳文件的大小
client_max_body_size 8m;
29
30 #keepalive_timeout 0;
31 keepalive_timeout 65;
32
33 #gzip on; #是否開啓gzip壓縮模塊
34#設定虛擬主機
35 server {
36 listen 80; #監聽端口
37 server_name localhost;#主機名稱
38
39 #charset koi8-r;#設置使用字符集
40
41 #access_log logs/host.access.log main;#訪問日誌文件存放路徑
42
43 location / {
44 root html;#網頁存放的目錄,也但是絕對路徑
45 index index.html index.htm;#默認首頁順序
46 }
47
48 error_page 404 /404.html;
49
50 # redirect server error pages to the static page /50x.html
51 #
52 error_page 500 502 503 504 /50x.html;
53 location = /50x.html {
54 root html;
55 }
56
57 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
58 #
59 #location ~ \.php$ {
60 # proxy_pass http://127.0.0.1;
61 #}
62
63 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
64 #
65 #location ~ \.php$ {
66 # root html;
67 # fastcgi_pass 127.0.0.1:9000;
68 # fastcgi_index index.php;
69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 # include fastcgi_params;
71 #}
72
73 # deny access to .htaccess files, if Apache's document root
74 # concurs with nginx's one
75 #
76 #location ~ /\.ht {
77 # deny all;
78 #}
79 }
80
81
82 # another virtual host using mix of IP-, name-, and port-based configuration
83 #
84 #server {
85 # listen 8000;
86 # listen somename:8080;
87 # server_name somename alias another.alias;
88
89 # location / {
90 # root html;
91 # index index.html index.htm;
92 # }
93 #}
94
95
96 # HTTPS server
97 #
98 #server {
99 # listen 443;
100 # server_name localhost;
101
102 # ssl on;
103 # ssl_certificate cert.pem;
104 # ssl_certificate_key cert.key;
105
106 # ssl_session_timeout 5m;
107
108 # ssl_protocols SSLv2 SSLv3 TLSv1;
109 # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
110 # ssl_prefer_server_ciphers on;
111
112 # location / {
113 # root html;
114 # index index.html index.htm;
115 # }
116 #}
117
118 }
=========================================================
2、配置文件格式:上面的是nginx.conf的配置示例,有些是添加上去的,主要構成能夠簡化爲:
......
events
{
......
}
http{
......
server{
......
}
server{
.......
}
.......
}
實際上這麼分開咱們就能一目瞭然的看到nginx.conf配置文件的結構,不是很難;
3、nginx的代理文件註釋
proxy_redirect off;
#proxy_set_header 指令用於在反向代理的後端web服務器發起請求時添加指定的header頭信息;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#容許客戶端請求的最大單個文件字節數;
client-max_body_size 10m;
#緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲先保存到本地再傳給用戶;
client_body_buffer_size 128;
#跟後端服務器鏈接超時時間,發起握手等候響應超時時間;
poxy_connect_timeout 5;
#鏈接成功後,等候後端服務器響應時間,其實已經進入後端的排隊之中等候處理;
proxy_read_timeout 60;
#後端服務器數據回傳時間,就是規定時間內後端服務器必須傳完全部的數據;
proxy_send_timeout 5;
#代理請求緩存區,這個緩存區見會保護用戶的頭信息以提供nginx進行校對規則,通常只要能保存下頭
#信息便可
proxy_buffer_size 16k;
#同上 ,告訴nginx保存單個用的幾個buffer最大用多大空間
proxy_buffers 4 64k;
#若是系統很忙的時候能夠申請更大的proxy_buffers官方推薦×2
proxy_busy_buffers_size 128k;
#proxy緩存臨時文件的大小;
proxy_temp_file_write_size 128k;php