Nginx伺服器配置檔案nginx.conf例項詳解

github_zwl發表於2017-10-26

nginx配置檔案主要分為六個區域:

main(全域性設定)events(nginx工作模式)http(http設定)

sever(主機設定)location(URL匹配)upstream(負載均衡伺服器設定)

其中還有若干模組,如HttpGzip模組,stubstatus模組等等

結構類似如下:

main

events   {

  ....

}

http        {

  ....

  upstream myproject {

    .....

  }

  server {

    ....

    location {

        ....

    }

  }

  server {

    ....

    location {

        ....

    }

  }

  ....

location {

        ....

                }

  ....

location {

        ....

                }

 

}

location /Nginx_status {

}

以下是結合具體例項對nginx.conf配置檔案的詳細解析

[root@localhostconf]# cat nginx.conf

###############  1、全域性配置  #################

#user  nobody;

#主模組指令,指定nginx worker程式執行使用者及使用者組,預設為nobody賬號

User  nobody nobody;

worker_processes   4;

#主模組指令,指定開啟程式數,每個nginx平均耗記憶體10~12MB,一般指定一個程式就足夠了,建議指定和CPU數目相同的程式數即可。

 

error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#error_log  logs/error.log;

#error_log 主模組指令,定義全域性錯誤日誌檔案。輸出級別有debug,info,notice,warn,error,crit可供選擇,其中debug輸出日誌最詳細,二crit輸出日誌最少。

 

pid        logs/nginx.pid;

worker_rlimit_nofile  65535;

# worker_rlimit_nofile用於繫結worker程式和CPU,Linux核心2.4以上使用

 

events {

#event指令用來設定nginx的工作模式及連線數上限。

 

        use epoll;

#use是個事件模組指令,用於指定工作模式,nginx支援的工作模式有select、poll、kqueue、epoll、rtsig、和/dev/poll,其中select和poll都是標準的工作模式。kqueue和epoll是高效的工作模式,其中kqueue用於BSD系統,而epoll用於Linux系統,對於Linux系統,epoll是首選。

 

    worker_connections  65536;

# worker_connections時間模組指令,用於定義程式的最大連線數,預設為1024,。

#最大客戶連線數由worker_connections和worker_processes決定,即max_client=worker_processes*worker_connections,在作為反向代理時變為:max_client= worker_processes*worker_connections/4。

#程式的最大連線數受Linux系統程式的最大開啟檔案數限制,在執行作業系統命令“ulimit –n 65536”後worker_connections的設定才生效。

}

 

################  2、HttpGzip模組配置 ##################

    gzip        on;

#gzip on : 開啟實時gzip壓縮輸出資料流,減少網路傳輸

 

    gzip_min_length   1k;

##gzip_min_length設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭的content-length中進行獲取。預設值是0,不管頁面大小都進行壓縮。建議設定成大於1k的位元組數,小於1k可能會越壓越大。

 

    gzip_buffers      4  16k;

#gzip_buffers設定系統獲取幾個單位的快取用於儲存gzip的壓縮結果資料流。4 16k代表申請4個單位為16K的記憶體作為壓縮結果六快取

 

    gzip_http_version   1.1;

#gzip_http_version用於識別 http 協議的版本,預設是1.1,目前絕大多數瀏覽器已經支援gzip解壓。

 

    gzip_comp_level     6;

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

 

    gzip_types text/html text/plaintext/css text/javascript application/json application/javascriptapplication/x-javascript application/xml;

#gzip_types指定何種型別進行壓縮,無論是否指定,”text/html”型別總是會被壓縮的。

 

    gzip_vary   on;

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

 

 

##################  3.http伺服器配置  ###############

http {

    include       mime.types;

#include是個主模組指令,實現對配置檔案所包含的檔案的設定,可以減少主配置檔案的複雜度。

 

    default_type application/octet-stream;

#default_type屬於http核心模組指令,預設為二進位制流,也就是當檔案型別未定義時使用這種方式,例如在沒有配置PHP環境時,nginx是不與解析的,此時,用瀏覽器訪問PHP檔案就會出現下載視窗。

 

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

                   '$status $body_bytes_sent"$http_referer" '

                    '"$http_user_agent" "$http_x_forwarded_for"';

#log_format  download'$remote_addr - $remote_user [$time_local] "$request"

                   '$status$body_bytes_sent "$http_referer" '

                    '"$http_user_agent" "$http_x_forwarded_for"';

#log_format是nginx的httplog模組指令,用於指定nginx的日誌輸出格式,main為此日誌出出個事的名稱,可以線上面access_log指令中使用。

    #access_log  logs/access.log  main;

 

        client_max_body_size   20m;

#設定允許客戶端請求的最大單個檔案位元組數

client_header_buffer_size    32k;

#用於指定客戶端請求頭的headerbuffer大小,對於大多數請求,1kb的緩衝區大小已經足夠,如果定義了訊息頭或有更大的cookie,可以增加緩衝區大小。

large_client_header_buffers        4      32k;

#用於指定客戶端請求中較大的訊息頭的快取最大數量和大小

 

    sendfile   on;

#sendfile用於開啟高效檔案傳輸模式,將tcp_nopush和tcp_nodely另個指令設定為on,用於防止網路阻塞。

    tcp_nopush    on;

        tcp_nodelay           on;

 

    keepalive_timeout  65;

    #keepalive_timeout  0;

#keepalive_timeout用於設定客戶端連續保持活動的超時時間。

        client_header_timeout 10;

#client_header_timeout用於設定客戶端請求頭讀取超時時間,超過該時間客戶端還沒傳送任何資料,nginx將返回“request time out(408)”錯誤。

client_body_timeout    10;

#client_body_timeout用於設定客戶端請求主體讀取超時時間,預設時間為602s,超過該時間客戶端還沒傳送任何資料,nginx將返回“request timeout(408)”錯誤。

        send_timeout                10;

#send_timeout 用於指定響應客戶端的超時時間,這個超時僅限於兩個連線活動之間的時間,如果超過這個時間,客戶端沒有任何活動,nginx將會關閉連線。

 

 

################  4、負載均衡配置 (例項)##################

####upstream是nginx的http upstream模組,這個模組通過一個簡單的排程演算法來實現客戶端IP到後端伺服器的負載均衡。

 

upstream  myserver {

# upstream  example.com;指定一個負載均衡器的名稱為example.com;。該名稱為任意##的,使用時呼叫即可。

       

ip_hash;

##ip_hash排程演算法,每個請求按IP的hash結果分配,是來自同一個IP的訪客##固定訪問一個後端伺服器,有效解決了動態伺服器存在的session共享問題

 

        server  192.168.56.102:8088

###server:該指令指定後端伺服器的IP地址和埠,同時還可以指定每個後端##伺服器在負載均衡排程中的狀態,常見的狀態有:down,backup,max_fails,##fail_timeout。

#backup:預留的備份機器,當其他所有的非backup機器出現故障或正在忙時,##才會請求backup機器,該機器壓力最輕。當排程演算法為ip_hash,狀態不能##為backup和weight;

server  192.168.56.101:8088 down;

#down:表示當前server暫時不參與負載均衡

        server  192.168.56.103:8088 max_fails=3  fail_timeout=20s;

        server  192.168.56.105:8088max_fails=3  fail_timeout=20s;

#max_fails:允許請求失敗的次數,預設為1。當超過最大次數時,返回

#proxy_next_upstream模組定義錯誤。

#fail_timeout:經歷max_fails次失敗後,暫停服務的時間。

        server  192.168.56.104:8088;

}

server {

    listen    8088;      

        server_name  www.example.com 192.168.56.110;

#指定IP地址或者域名,多個域名之間用空格隔開。

        index  index.html index.htm  index.jsp;

#設定訪問的預設首頁地址

    root   /web/wwwroot/www;

#指定主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑

 

#對 / 所有做負載均衡+反向代理

 location / {

     proxy_pass        http://myserver; 

#proxy_pass http://myserver:實現負載排程功能,proxy_pass指令用來指定請求轉向代理的後端伺服器定義的伺服器列表,即反向代理,對應upstream負載均衡器。地址也可以是主機名或者IP地址,如:proxy_passhttp://ip:port。

proxy_next_upstream   http_500  http_502  http_503   http_504 error  timeout invalid_header;

#proxy_next_upstream:定義故障轉移策略,當後端伺服器節點返回500、502、503、504和執行超時等錯誤時,自動將請求轉發到upstream負載均衡組中的另一臺伺服器,實現故障轉移。

    

 

############# 5.http_proxy設定##################

####該部分亦可以使用寫進proxy.conf檔案中,再使用include指令包含進來,######從而使配置顯得更簡練

######用法:include    /opt/nginx/conf/proxy.conf ####

    client_max_body_size   10m;

    client_body_buffer_size   128k;

#client_body_buffer_size:用於指定客戶端請求主體緩衝區大小,意思就是先儲存到本地再傳給使用者。

    proxy_connect_timeout   75;

#nginx跟後端伺服器連線超時時間(代理連線超時)

#連線成功後,與後端伺服器兩個成功的響應操作之間超時時間(代理接收超時)

    proxy_send_timeout   75;

#proxy_send_timeout:後端伺服器的資料回傳時間,超時則斷開連線

    proxy_read_timeout   75;

#proxy_read_timeout:設定nginx從代課的後端伺服器獲取資訊的時間,即在規定時間之內後端伺服器必須傳完所有的資料,否則斷開連線。

 

    proxy_buffer_size   4k;

#設定代理伺服器(nginx)從後端伺服器讀取並儲存使用者頭資訊的緩衝區大小,預設與proxy_buffers大小相同,其實可以將這個指令值設的小一點

   proxy_buffers   4  32k;

#proxy_buffers緩衝區,nginx針對單個連線快取來自後端realserver的響應,網頁平均在32k以下的話,這樣設定

    proxy_busy_buffers_size    64k;

#高負荷下緩衝大小(官方建議為proxy_buffers*2)

    proxy_temp_file_write_size   64k;

#指定proxy快取臨時檔案的大小

 

    proxy_temp_path    /usr/local/nginx/proxy_temp 1 2;

#當快取被代理的伺服器響應到臨時檔案時,這個選項限制每次寫臨時檔案的大小。proxy_temp_path(可以在編譯的時候)指定寫到哪那個目錄。

       

proxy_redirect off;

# 後端的Web伺服器可以通過X-Forwarded-For獲取使用者真實IP

    proxy_set_header  Host $host;

#proxy_set_header:設定由後端伺服器獲取使用者主機或真實IP地址,以及代理者的真實IP

    proxy_set_header  X-Real-IP $remote_addr; 

#

    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

#  

        }

        }

 

 

##############  6、server虛擬主機配置 (例項) ################

 

server {

    listen    80;

#指定虛擬主機的伺服器

  

  server_name www.example.com;

    # server_name  192.168.56.111;

#指定IP地址或者域名,多個域名之間用空格隔開。

  

access_log  logs/ example.access.log  main;

#access_log用於指定此虛擬主機的訪問日誌存放路徑,main用於指定訪問日誌的輸出格式。

location / {

        index  index.html index.htm  index.jsp;

#設定訪問的預設首頁地址

    root   /web/wwwroot/example/vhost

#指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑

    charset  utf-8;

#設定網頁預設的編碼格式

}

}

server {

    listen    80;

#指定虛擬主機的伺服器

  

  server_name www.example1.com;

    # server_name  192.168.56.112;

#指定IP地址或者域名,多個域名之間用空格隔開。

    

access_log  logs/ example1.access.log  main;

#access_log用於指定此虛擬主機的訪問日誌存放路徑,main用於指定訪問日誌的輸出格式。

location / {

        index  index.html index.htm  index.jsp;

#設定訪問的預設首頁地址

    root   /web/wwwroot/example1/vhost

#指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑

    charset  utf-8;

#設定網頁預設的編碼格式

}

}

Include  /opt/nginx/conf/vhost/ www.example2.com.conf ;

}}

###此處用到include指令,其中/opt/nginx/conf/vhost/ www.example2.com.conf

##內容為:

 server {

    listen    80;  

  server_name www.example2.com;

    # server_name  192.168.56.113;

access_log  logs/ example1.access.log  main;

location / {

        index  index.html index.htm  index.jsp;

    root   /web/wwwroot/example2/vhost

    charset  utf-8;

}

}

 

 

 

##########  7、URL配置設定 ##################

###location支援正規表示式和條件判斷匹配,可以通過location指令實現nginx對動靜態網頁的過濾處理。

 

  location ~ * \.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$  

#所有副檔名為gif|jpg|jpeg|bmp|png|ico|txt|js|css的靜態檔案都交給nginx處理

        {  

            root   /web/wwwroot/html;

            expires      30d;

#expires指定靜態檔案的過期時間

        }

location ~^/(upload|html)/   

#將upload和html下的所有檔案都交給nginx來處理,當然upload和html目錄包含在/web/wwwroot/html目錄中

        {  

            root        /web/wwwroot/html;   expires   30d;

        }

location  ~ .*.jsp$  

#location對此虛擬機器下動態網頁的過濾處理,也就是將所有.jsp為字尾的檔案都交給本機8080埠處理。

        {  

            Index       index.jsp;

            Proxy_pass     http://localhost:8080;

        }

 

 

 

##### #######  8、stubstatus模組配置###############

  location /Nginx_status {

        stub_status   on;

#啟用stub_status的工作狀態統計功能

 

        access_log     log/NginxStatus.log;

# access_log用來指定stub_status模組的訪問日誌檔案

 

        auth_basic              “NginxStatus”;

#auth_basic是nginx的一種認證機制

 

                auth_basic_user_file     ../htpasswd;

#auth_basic_user_file用來指定認證的密碼檔案

#nginx的auth_basic採用的是與Apache相容的密碼檔案,所以需要採用

#Apache的htpasswd命令來生成密碼檔案

#如新增一個fieldyang 使用者可以用該方式生成密碼檔案

#/usr/local/apache/bin/htpasswd  –c /opt/nginx/conf/htpasswd fieldyang  

#要檢視nginx執行狀態,只需在http://ip/NginxStatus輸入賬號密碼即可

      

# #           allow  192.168.10.0/24;

# #           allow  192.168.56.100;

# #           deny all;

 

 }

 

############  9、虛擬主機錯誤資訊返回頁面  #################

        error_page  404              /404.html;

#error_page指令可以定製各種錯誤資訊返回頁面,nginx會在主目錄的html目

#錄中查詢指定的返回頁面

       

# redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

}

相關文章