1. 程式人生 > >nginx完整配置檔案例子

nginx完整配置檔案例子

例一:

這是一個比較完整的nginx配置檔案示例,下面的nginx.conf簡單的實現nginx在前端做反向代理伺服器的例子,處理js、png等靜態檔案,jsp等動態請求轉發到其它伺服器tomcat,以及負載均衡的配置。

user  www www;
worker_processes  2;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    use epoll;
    worker_connections  2048;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    # tcp_nopush     on;

    keepalive_timeout  65;

  # gzip壓縮功能設定
    gzip on;
    gzip_min_length 1k;
    gzip_buffers    4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 6;
    gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;

  # http_proxy 設定
    client_max_body_size   10m;
    client_body_buffer_size   128k;
    proxy_connect_timeout   75;
    proxy_send_timeout   75;
    proxy_read_timeout   75;
    proxy_buffer_size   4k;
    proxy_buffers   4 32k;
    proxy_busy_buffers_size   64k;
    proxy_temp_file_write_size  64k;
    proxy_temp_path   /usr/local/nginx/proxy_temp 1 2;

  # 設定負載均衡後臺伺服器列表 
    upstream  backend  { 
              #ip_hash; 
              server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;  
              server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;  
    }

  # 很重要的虛擬主機配置
    server {
        listen       80;
        server_name  itoatest.example.com;
        root   /apps/oaapp;

        charset utf-8;
        access_log  logs/host.access.log  main;

        #對 / 所有做負載均衡+反向代理
        location / {
            root   /apps/oaapp;
            index  index.jsp index.html index.htm;

            proxy_pass        http://backend;  
            proxy_redirect off;
            # 後端的Web伺服器可以通過X-Forwarded-For獲取使用者真實IP
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;  
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

        }

        #靜態檔案,nginx自己處理,不去backend請求tomcat
        location  ~* /download/ {  
            root /apps/oa/fs;  

        }
        location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$   
        {   
            root /apps/oaapp;   
            expires      7d; 
        }
        location /nginx_status {
            stub_status on;
            access_log off;
            allow 192.168.10.0/24;
            deny all;
        }

        location ~ ^/(WEB-INF)/ {   
            deny all;   
        }
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

  ## 其它虛擬主機,server 指令開始
}

例二:

#執行使用者
user nobody;
#啟動程序,通常設定成和cpu的數量相等
worker_processes  1;

#全域性錯誤日誌及PID檔案
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#工作模式及連線數上限
events {
    #epoll是多路複用IO(I/O Multiplexing)中的一種方式,
    #僅用於linux2.6以上核心,可以大大提高nginx的效能
    use   epoll; 

    #單個後臺worker process程序的最大併發連結數    
    worker_connections  1024;

    # 併發總數是 worker_processes 和 worker_connections 的乘積
    # 即 max_clients = worker_processes * worker_connections
    # 在設定了反向代理的情況下,max_clients = worker_processes * worker_connections / 4  為什麼
    # 為什麼上面反向代理要除以4,應該說是一個經驗值
    # 根據以上條件,正常情況下的Nginx Server可以應付的最大連線數為:4 * 8000 = 32000
    # worker_connections 值的設定跟實體記憶體大小有關
    # 因為併發受IO約束,max_clients的值須小於系統可以開啟的最大檔案數
    # 而系統可以開啟的最大檔案數和記憶體大小成正比,一般1GB記憶體的機器上可以開啟的檔案數大約是10萬左右
    # 我們來看看360M記憶體的VPS可以開啟的檔案控制代碼數是多少:
    # $ cat /proc/sys/fs/file-max
    # 輸出 34336
    # 32000 < 34336,即併發連線總數小於系統可以開啟的檔案控制代碼總數,這樣就在作業系統可以承受的範圍之內
    # 所以,worker_connections 的值需根據 worker_processes 程序數目和系統可以開啟的最大檔案總數進行適當地進行設定
    # 使得併發總數小於作業系統可以開啟的最大檔案數目
    # 其實質也就是根據主機的物理CPU和記憶體進行配置
    # 當然,理論上的併發總數可能會和實際有所偏差,因為主機還有其他的工作程序需要消耗系統資源。
    # ulimit -SHn 65535

}


http {
    #設定mime型別,型別由mime.type檔案定義
    include    mime.types;
    default_type  application/octet-stream;
    #設定日誌格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    #sendfile 指令指定 nginx 是否呼叫 sendfile 函式(zero copy 方式)來輸出檔案,
    #對於普通應用,必須設為 on,
    #如果用來進行下載等應用磁碟IO重負載應用,可設定為 off,
    #以平衡磁碟與網路I/O處理速度,降低系統的uptime.
    sendfile     on;
    #tcp_nopush     on;

    #連線超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;

    #開啟gzip壓縮
    gzip  on;
    gzip_disable "MSIE [1-6].";

    #設定請求緩衝
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;


    #設定虛擬主機配置
    server {
        #偵聽80埠
        listen    80;
        #定義使用 www.nginx.cn訪問
        server_name  www.nginx.cn;

        #定義伺服器的預設網站根目錄位置
        root html;

        #設定本虛擬主機的訪問日誌
        access_log  logs/nginx.access.log  main;

        #預設請求
        location / {

            #定義首頁索引檔案的名稱
            index index.php index.html index.htm;   

        }

        # 定義錯誤提示頁面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }

        #靜態檔案,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {

            #過期30天,靜態檔案不怎麼更新,過期可以設大一點,
            #如果頻繁更新,則可以設定得小一點。
            expires 30d;
        }

        #PHP 指令碼請求全部轉發到 FastCGI處理. 使用FastCGI預設配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        #禁止訪問 .htxxx 檔案
            location ~ /.ht {
            deny all;
        }

    }
}

例三:

user  www www;  #指定Nginx Worker程序執行使用者以及使用者組

worker_processes 2; #指定了Nginx要開啟的程序數,多核CPU指定和核數一樣多的程序數

pid        logs/nginx.pid; #指定程序id的儲存檔案位置

worker_rlimit_nofile 65535; #指定單程序開啟檔案數,需與系統設定一致

 

events {

use epoll;  #指定nginx工作模式,nginx主要的工作模式有select、poll、kqueue、epoll

            其中select、poll是標準工作模式,kqueue、epoll為高效工作模式,epoll用在Linux系統中,而kqueue用在BSD系統中

    worker_connections  65535;#指定單程序的最大連線數

}

 

HTTP部分

 

http {

    include      mime.types; #指定配置檔案所包含的檔案

    default_type  application/octet-stream; #指定預設型別為二進位制流,也就是當檔案型別未定義時使用這種方式,例如在沒有配置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"';;

   

 

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

    client_header_buffer_size    16k;#指定來自客戶端請求頭的headerbuffer大小,如果自定義了訊息頭或有更大的cookie,可以在這裡增加緩衝大小

    large_client_header_buffers  4 32k;#指定客戶端請求中較大的訊息頭的快取最大數量和大小,4為個數,32k為大小,最大快取為4個32kb

 

    sendfile        on;#開啟高效傳輸模式

    tcp_nopush    on;  # tcp_nopush,tcp_nodelay設定on,防止網路阻塞

    tcp_nodelay    on;         

   

    keepalive_timeout  65; #指定客戶端連線保持活動的超時時間

    client_header_timeout  10;#指定客戶端請求頭讀取超時時間,如果超過這個時間,客戶端還沒有傳送任何資料,Nginx將返回“Request time out(408)”錯誤

    client_body_timeout  10;#指定客戶端請求主體讀取超時時間,如果超過這個時間���客戶端還沒有傳送任何資料,Nginx將返回“Request time out(408)”錯誤

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

 

 

    gzip  on; #開啟gzip壓縮,實時壓縮輸出資料流

    gzip_min_length  1k; #設定允許壓縮的頁面最小位元組數

    gzip_buffers    4  16k; #指定記憶體空間來存貯壓縮結果,這裡指定4個單位為16k的記憶體來儲存壓縮結果,即總大小為64k

    gzip_http_version  1.1;#指定識別HTTP協議版本,預設是1.1

    gzip_comp_level  2;#指定gzip壓縮比,1 壓縮比最小,處理速度最快;9 壓縮比最大,傳輸速度快,但處理最慢,也比較消耗CPU資源

    gzip_types  text/plain application/x-javascript text/css application/xml;#指定壓縮的型別,無論是否指定,“text/html”型別總是會被壓縮

    gzip_vary  on;#該選項開啟可以讓前端的快取伺服器快取經過gzip壓縮的頁面,例如,用Varnish快取經過Nginx壓縮的資料

 

server_tokens off;#隱藏Nginx版本號

 

server {

        listen      8000; #指定Nginx監埠

        server_name  localhost;#用來指定IP或者域名

 

        charset utf-8;#指定Nginx預設的字符集,只有utf-8支援中文字元

        access_log  logs/host.access.log  main;#指定訪問日誌的名稱及位置

 

        location / {

            index  index.html index.htm;#設定預設首頁

            root /tom/webapps/ROOT;#指定網頁根目錄

        }

 

location ~ (jsp|\?) {      #指定url中包含jsp或者?的全部轉發到192.168.0.10的80埠即tomcat處理

            proxy_pass  http://192.168.0.10:80;

        }

狀態監控模組: