nginx學習(二):初識配置文件

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

相關文章
相關標籤/搜索