1. 程式人生 > >Nginx詳細安裝部署教程(二)

Nginx詳細安裝部署教程(二)

#代表普通配置
#==代表性能配置

#執行使用者
user nobody;
#pid檔案
pid logs/nginx.pid;
#==worker程序數,通常設定等同於CPU數量,auto為自動檢測
worker_processes auto;
#==worker程序開啟最大檔案數,可CPU*10000設定
worker_rlimit_nofile 100000;
#全域性錯誤日誌
error_log  logs/error.log;


#events模組中包含nginx中所有處理連線的設定
events {
    #==worker程序同時開啟的最大連線數,可CPU*2048設定
    worker_connections 2048;
    #==告訴nginx收到一個新連結通知後接受盡可能多的連結
    multi_accept on;
    #==設定用於複用客戶端執行緒的輪訓方法
    use epoll;
}


#http模組控制著nginx http處理的所有核心特性
http {
    #開啟或關閉錯誤頁面中的nginx版本號deng
    server_tokens on;
    #!server_tag on;
    #!server_info on;
    #==優化磁碟IO設定,指定nginx是否呼叫sendfile函式來輸出檔案,普通應用設為on,下載等磁碟IO高的應用,可設為off
    sendfile on;
    #==設定nginx在一個數據包裡傳送所有標頭檔案,而不是一個接一個的傳送
    tcp_nopush on;
    #==設定nginx不要快取資料,而是一段一段的傳送,
    #==當需要及時傳送資料時,就應該給應用設定這個屬性,這樣傳送一小塊資料資訊時就不能立即得到返回值
    tcp_nodelay on;

    #==設定nginx是否儲存訪問日誌,關閉這個可以讓讀取磁碟IO操作更快
    access_log on;
    #設定nginx只記錄嚴重錯誤
    #error_log logs/error.log crit;

    #==給客戶端分配keep-alive連結超時時間
    keepalive_timeout 30;

    #設定使用者儲存各種key的共享記憶體的引數,5m指的是5兆
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    #為給定的key設定最大的連線數,這裡的key是addr,設定的值是100,就是說允許每一個IP地址最多同時開啟100個連線
    limit_conn addr 100;

    #include指在當前檔案中包含另一個檔案內容
    include mime.types;
    #設定檔案使用預設的mine-type
    default_type text/html;
    #設定預設字符集
    charset UTF-8;

    #==設定nginx採用gzip壓縮的形式傳送資料,減少傳送資料量,但會增加請求處理時間及CPU處理時間,需要權衡
    gzip on;
    #==加vary給代理伺服器使用,針對有的瀏覽器支援壓縮,有個不支援,根據客戶端的HTTP頭來判斷是否需要壓縮
    gzip_vary on;
    #nginx在壓縮資源之前,先查詢是否有預先gzip處理過的資源
    #!gzip_static on;
    #為指定的客戶端禁用gzip功能
    gzip_disable "MSIE[1-6]\.";
    #允許或禁止壓縮基於請求和相應的響應流,any代表壓縮所有請求
    gzip_proxied any;
    #==設定對資料啟用壓縮的最少位元組數,如果請求小於10240位元組則不壓縮,會影響請求速度
    gzip_min_length 10240;
    #==設定資料壓縮等級,1-9之間,9最慢壓縮比最大
    gzip_comp_level 2;
    #設定需要壓縮的資料格式
    gzip_types text/plain text/css text/xml text/javascript  application/json application/x-javascript application/xml application/xml+rss; 

    #==開發快取的同時也指定了快取檔案的最大數量,20s如果檔案沒有請求則刪除快取
    open_file_cache max=100000 inactive=20s;
    #==指多長時間檢查一次快取的有效資訊
    open_file_cache_valid 60s;
    #==檔案快取最小的訪問次數,只有訪問超過5次的才會被快取
    open_file_cache_min_uses 5;
    #當搜尋一個檔案時是否快取錯誤資訊
    open_file_cache_errors on;

    #==允許客戶端請求的最大單檔案位元組數
    client_max_body_size 8m;
    #==衝區代理緩衝使用者端請求的最大位元組數
    client_header_buffer_size 32k;

    #
    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;
    #==nginx跟後端伺服器連線超時時間(代理連線超時)
    proxy_connect_timeout 60;
    #==連線成功後,後端伺服器響應時間(代理接收超時)
    proxy_read_timeout 120;
    #==後端伺服器資料回傳時間(代理髮送超時)
    proxy_send_timeout 20;
    #==設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小
    proxy_buffer_size 32k;
    #==proxy_buffers緩衝區,網頁平均在32k以下的設定
    proxy_buffers 4 128k;
    #==高負荷下緩衝大小(proxy_buffers*2)
    proxy_busy_buffers_size 256k;
    #==設定快取資料夾大小,大於這個值,將從upstream伺服器傳
    proxy_temp_file_write_size 256k;
    #==1G記憶體緩衝空間,3天不用刪除,最大磁碟緩衝空間2G
    proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;


    #設定負載均衡伺服器列表
    upstream nginx.test.com{
        #後端伺服器訪問規則
        #ip_hash;
        #weight引數表示權重值,權值越高被分配到的機率越大
        #server 10.11.12.116:80 weight=5;
        #PC_Local
        server 10.11.12.116:80;
        #PC_Server
        server 10.11.12.112:80;
        #Notebook
        #server 10.11.12.106:80;
    }

    #虛擬主機設定模組(掛載多個站點,只需要配置多個server及upstream節點即可)
    server {
        #監聽80埠
        listen 80;
        #定義使用nginx.test.com訪問
        server_name nginx.test.com;
        #設定本虛擬主機的訪問日誌
        access_log logs/nginx.test.com.access.log;
        
        #預設請求
        # 語法規則:location [=|~|~*|^~] /uri/ {...} 先匹配普通location,在匹配正則location
        # = 開頭表示精確匹配
        # ^~ 開頭表示uri以某個常規字串開頭,理解為匹配url路徑即可,無需考慮編解碼
        # ~ 開頭表示區分大小寫的正則匹配
        # ~* 開頭表示不區分大小寫的正則匹配
        # !~ 開頭表示區分大小寫的不匹配的正則
        # !~* 開頭表示不區分大小寫的不匹配的正則
        # / 通用匹配,任何請求都會被匹配到
        location / {
            #定義伺服器的預設網站根目錄位置
            root html;
            #定義首頁索引檔案的名稱
            index index.html index.htm;
            #定義後端負載伺服器組
            proxy_pass http://nginx.test.com;
        }

        #定義錯誤提示頁面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
        #靜態檔案,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/{
            root /var/www/virtual/htdocs;
            #過期時間1天
            expires 1d;
            #關閉媒體檔案日誌
            access_log off;
            log_not_found off;
        }
        #設定檢視Nginx狀態的地址
        location /NginxStatus {
            #!stub_status on; #無此關鍵字
            access_log off;
            auth_basic "NginxStatus";
            auth_basic_user_file conf/htpasswd;
        }
        #禁止訪問的檔案.htxxx
        location ~ /\.ht {
            deny all;
        }
    }
    #網站較多的情況下ngxin又不會請求瓶頸可以考慮掛多個站點,並把虛擬主機配置單獨放在一個檔案內,引入進來
    #include website.conf;
}