nginx學習(二):初識配置檔案
nginx的配置檔案預設在nginx安裝目錄中的conf子目錄中,主配置檔案為nginx.conf,
root@mgmserver conf]# pwd
/usr/local/nginx/conf
一、配置檔案
/usr/local/nginx/conf
一、配置檔案
[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 {
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的時候可以用。
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的應用程式也有同樣的問題。
這兩個選項都對網路連線的行為具有重要的作用。許多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;#主機名稱
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 }
=========================================================
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 }
=========================================================
二、配置檔案格式:上面的是nginx.conf的配置示例,有些是新增上去的,主要構成可以簡化為:
......
events
{
......
}
http{
......
server{
......
}
server{
.......
}
.......
}
實際上這麼分開我們就能一目瞭然的看到nginx.conf配置檔案的結構,不是很難;
三、nginx的代理檔案註釋
proxy_redirect off;
#proxy_set_header 指令用於在反向代理的後端web伺服器發起請求時新增指定的header頭資訊;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
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;
相關文章
- webpack學習(二)初識打包配置Web
- 【Nginx學習筆記】-初識NginxNginx筆記
- nginx的檔案描述符的學習之二Nginx
- Nginx 配置檔案Nginx
- nginx配置檔案Nginx
- Linux下玩轉nginx系列(二)——nginx配置檔案說明LinuxNginx
- Nginx學習系列三Nginx的啟動、停止、修改配置檔案後重啟Nginx
- ?從零開始學習webpack系列二(配置檔案)Web
- SpringBoot基礎學習(二) SpringBoot全域性配置檔案及配置檔案屬性值注入Spring Boot
- Nginx的初識Nginx
- Nginx的配置檔案詳解Nginx
- Nginx的配置檔案說明Nginx
- Nginx 配置檔案 nginx.conf 中文詳解Nginx
- 初識機器學習機器學習
- nginx日誌配置檔案說明Nginx
- Gixy–分析Nginx配置檔案的工具Nginx
- openresty/nginx配置多個conf檔案RESTNginx
- Nginx 配置檔案引數詳解Nginx
- Nginx配置檔案的語法格式Nginx
- nginx 基本命令和檔案配置Nginx
- nginx.conf 配置檔案詳解Nginx
- 03.MyBatis學習-----全域性配置檔案_properties_引入外部配置檔案MyBatis
- jackson學習之九:springboot整合(配置檔案)Spring Boot
- nginx 文件地址及配置檔案入門Nginx
- nginx製作檢查配置bat檔案NginxBAT
- Redis學習(一)——初識RedisRedis
- VC++學習筆記---配置檔案(一) ini檔案和propritiesC++筆記
- Nginx基礎02:配置檔案nginx.conf(Part1)Nginx
- 二、Nginx 配置 httpsNginxHTTP
- influx詳解(二):配置檔案UX
- Laravel 學習筆記一: 專案框架和配置檔案Laravel筆記框架
- laravel學習之nginx配置站點LaravelNginx
- [寒假學習筆記](二)Python初學筆記Python
- spark初識二Spark
- 初識 webpack (二)Web
- 透過nginx配置檔案抵禦攻擊Nginx
- 緒論 初識機器學習機器學習
- JVM學習筆記——初識JVMJVM筆記
- Nginx 學習系列(二) ————- 負載均衡Nginx負載