Nginx 優化配置及詳細注釋


Nginx 的nginx.conf文件,是調優后的,具體影響已經寫清楚注釋,可以拿來用,有一些設置無效,我備注上了,不知道是不是版本的問題,回頭查一下再更正。 

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


#運行用戶
user nobody;
#pid文件
pid logs/nginx.pid;

#Nginx基於事件的非阻塞多路復用模型(epoll或kquene)
#一個進程在短時間內可以響應大量請求,工作進程設置與cpu數相同,避免cpu在多個進程間切換增加開銷
#==worker進程數,通常設置<=CPU數量,auto為自動檢測,一般設置最大8個即可,再大性能提升較小或不穩定
worker_processes auto;

#==將每個進程綁定到特定cpu上,避免進程在cpu間切換的開銷
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

#==worker進程打開最大文件數,可CPU*10000設置,或設置系統最大數量655350
worker_rlimit_nofile 102400;
#全局錯誤日志
error_log  logs/error.log;


#events模塊中包含nginx中所有處理連接的設置,並發響應能力的關鍵配置
events {
    #==每個進程同時打開的最大連接數(最大並發數)
    worker_connections 102400;
    
    #==告訴nginx收到一個新鏈接通知后接受盡可能多的鏈接
    #multi_accept on;
    
    #一般http 1.1協議下,瀏覽器默認使用兩個並發鏈接
    #如果是反向代理,nginx需要和客戶端保持連接,還需要和后端服務器保持連接
    #Http服務器時,設置max_client=worker_processes*worker_connections/2
    #反向代理時,設置max_client=worker_processes*worker_connections/4    
    #==最大可用客戶端數
    #max_client 
    
    #==使用非阻塞模型,設置復用客戶端線程的輪訓方法
    use epoll;
}


#http模塊控制着nginx http處理的所有核心特性
http {
    #打開或關閉錯誤頁面中的nginx版本號等信息
    server_tokens on;
    #!server_tag on;
    #!server_info on;
    #==優化磁盤IO設置,指定nginx是否調用sendfile函數來輸出文件,普通應用設為on,下載等磁盤IO高的應用,可設為off
    sendfile on;
    
    #緩存發送請求,啟用如下兩個配置,會在數據包達到一定大小后再發送數據
    #這樣會減少網絡通信次數,降低阻塞概率,但也會影響響應的及時性
    #比較適合於文件下載這類的大數據包通信場景
    #tcp_nopush on;
    #tcp_nodelay on;

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

    #Http1.1支持長連接
    #降低每個鏈接的alive時間可在一定程度上提高響應連接數量
    #==給客戶端分配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;
    #==啟用壓縮的最少字節數,如果請求小於1024字節則不壓縮,壓縮過程會消耗系統資源
    gzip_min_length 1024;
    #==數據壓縮等級,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 30s;
    #==有效期內緩存文件最小的訪問次數,只有訪問超過2次的才會被緩存
    open_file_cache_min_uses 2;
    #當搜索一個文件時是否緩存錯誤信息
    open_file_cache_errors on;

    #==允許客戶端請求的最大單文件字節數
    client_max_body_size 4m;
    #==客戶端請求頭緩沖區大小
    client_header_buffer_size 4k;

    #是否啟用對發送給客戶端的URL進行修改
    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代表虛擬主機,可以理解為站點(掛載多個站點,只需要配置多個server及upstream節點即可)
    server {
        #監聽80端口
        listen 80;
        #識別的域名,定義使用nginx.test.com訪問
        server_name nginx.test.com;
        #設定本虛擬主機的訪問日志
        access_log logs/nginx.test.com.access.log;
        
        #一個域名下匹配多個URI的訪問,使用location進行區分,后面緊跟着的/代表匹配規則
        #如動態資源訪問和靜態資源訪問會分別指向不同的位置的應用場景
        #
        # 基本語法規則:location [=|~|~*|^~] /uri/ {...} 
        # = 開頭表示精確匹配
        # ^~ 開頭表示uri以某個常規字符串開頭,匹配成功后不再進行正則匹配
        # ~ 開頭表示區分大小寫的正則匹配
        # ~* 開頭表示不區分大小寫的正則匹配
        # !~ 開頭表示區分大小寫的不匹配的正則
        # !~* 開頭表示不區分大小寫的不匹配的正則
        # / 通用匹配,任何請求都會被匹配到
        #
        # 理解如下:
        # 有兩種匹配模式:普通字符串匹配,正則匹配
        # 無開頭引導字符或以=開頭表示普通字符串匹配
        # 以~或~*開頭表示正則匹配,~*表示不區分大小寫
        # 【多個location時,先匹配普通字符串location,再匹配正則location】
        # 只識別URI部分,例如請求為“/test/1/abc.do?arg=xxx”
        # (1)先查找是否有=開頭的精確匹配,即“location=/test/1/abc.do {...}”
        # (2)再查找普通匹配,以“最大前綴”為規則,如有以下兩個location
        #    location /test/ {...}
        #    location /test/1/ {...}
        #    則匹配后一項
        # (3)匹配到一個普通location后,搜索並未結束,而是暫存當前結果,並繼續進行正則搜索
        # (4)在所有正則location中找到第一個匹配項后,以此匹配項為最終結果
        # 【所以正則匹配項,匹配規則受定義前后順序影響,但普通匹配不會】
        # (5)如果未找到正則匹配項,則以(3)中緩存的結果為最終結果
        # (6)如果一個匹配都沒有,則返回404
        # location =/ {...}與location / {...}的差別
        # 前一個是精確匹配,只響應“/”的請求,所有“/xxx”形式的請求不會以“前綴匹配形式”匹配到它
        # 后一個正相反,所有請求必然都是以“/”開頭,所以沒有其他匹配結果時一定會執行到它
        # location ^~ / {...} ^~的意思是禁止正則匹配,表示匹配到此項后不再進行后續的正則搜索
        # 相當於普通匹配模式匹配成功后就以此結果為最終結果,停止進行后續的正則匹配
        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;禁止訪問,返回403
            deny all;
            #allow all;允許訪問
        }
    }
    #網站較多的情況下ngxin又不會請求瓶頸可以考慮掛多個站點,並把虛擬主機配置單獨放在一個文件內,引入進來
    #include website.conf;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM