Nginx配置文件解析


user                  nginx nginx;    #定義Nginx運行的用戶和用戶組
worker_processes      1;              #nginx進程數,建議設置為等於CPU總核心數
worker_rlimit_nofile  1024;           #一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求並不均勻,所以建議與ulimit -n的值保持一致
error_log        /var/log/nginx/error.log info; #全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ]
pid                   /var/run/nginx.pid; #進程文件 

#工作模式與連接數上限
events {
    use                 epoll; #設置用於復用客戶端線程的輪詢方法,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上內核,可以大大提高nginx的性能
    worker_connections  1024;  #單個進程最大連接數(最大連接數=連接數*進程數)
    multi_accept        on;    #收到一個新連接通知后接受盡可能多的連接
}

#http服務器(詳細參數:http://nginx.org/en/docs/http/ngx_http_core_module.html)
http {
    include           /etc/nginx/mime.types; #文件擴展名與文件類型映射表
    default_type      application/octet-stream; #默認文件類型
    access_log        off;   #訪問日志。關閉這個選項可以讓讀取磁盤IO操作更快(aka,YOLO)
    charset           utf-8; #默認編碼
    server_tokens     off;   #關閉在錯誤頁面中的nginx版本數字,這樣對於安全性是有好處的
    sendfile          on;    #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off
    autoindex         off;   #開啟目錄列表訪問,合適下載服務器,默認關閉
    tcp_nopush        on;    #在一個數據包里發送所有頭文件,而不一個接一個的發送。防止網絡阻塞
    tcp_nodelay       on;    #不緩存數據,而是一段一段的發送。當需要及時發送數據時,就應該給應用設置這個屬性,這樣發送一小塊數據信息時就不能立即得到返回值。防止網絡阻塞
    keepalive_timeout 120;   #長連接超時時間,單位是秒
    
    client_header_buffer_size    32k;   #客戶請求頭緩沖大小
    large_client_header_buffers  4 64k; #nginx默認會用 client_header_buffer_size 這個buffer來讀取header值,如果header過大,它會使用 large_client_header_buffers 來讀取
    client_max_body_size         8m;    #指定允許客戶端連接的最大請求實體大小,它出現在請求頭部的Content-Length字段

    open_file_cache              max=1000 inactive=20s; #緩存是否啟用,如果啟用,將記錄文件以下信息: 打開的文件描述符、大小信息、修改時間、存在的目錄信息、在搜索文件過程中的錯誤信息,max指定緩存的最大數目,如果緩存溢出,最長使用過的文件(LRU)將被移除
    open_file_cache_errors       on;    #是否在搜索一個文件是記錄cache錯誤,默認值: off
    open_file_cache_min_uses     2;     #在open_file_cache指令無效的參數中一定的時間范圍內可以使用的最小文件數,如果使用更大的值,文件描述符在cache中總是打開狀態,默認值:1 
    open_file_cache_valid        30s;   #何時需要檢查open_file_cache中緩存項目的有效信息。默認值:60s
    
    #FastCGI相關參數是為了改善網站的性能:減少資源占用,提高訪問速度。下面參數看字面意思都能理解
    fastcgi_connect_timeout      300;
    fastcgi_send_timeout         300;
    fastcgi_read_timeout         300;
    fastcgi_buffer_size          64k;
    fastcgi_buffers              4 64k; 
    fastcgi_busy_buffers_size    128k;
    fastcgi_temp_file_write_size 128k;

    #gzip模塊設置
    gzip            on;    #開啟gzip壓縮輸出
    gzip_static     on;    #nginx對於靜態文件的處理模塊,該模塊可以讀取預先壓縮的gz文件,這樣可以減少每次請求進行gzip壓縮的CPU資源消耗。該模塊啟用后,nginx首先檢查是否存在請求靜態文件的gz結尾的文件,如果有則直接返回該gz文件內容。為了要兼容不支持gzip的瀏覽器,啟用gzip_static模塊就必須同時保留原始靜態文件和gz文件。這樣的話,在有大量靜態文件的情況下,將會大大增加磁盤空間。我們可以利用nginx的反向代理功能實現只保留gz文件。
    gzip_disable    "MSIE [1-6]\.(?!.*SV1)";    #禁用IE6的gzip壓縮,IE6的某些版本對gzip的壓縮支持很不好,會造成頁面的假死
    gzip_min_length 1k;    #設置允許壓縮的頁面最小字節,頁面字節數從header頭的Content-Length中獲取,默認值是0,不管頁面多大都進行壓縮。建議設置成大於1K。如果小於1K可能越壓越大
    gzip_buffers    4 16k; #壓縮緩沖區,設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。4 16k代表以16k為單位,安裝原始數據大小以16k為單位的4倍申請內存 。如果沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果
    gzip_comp_level 4;     #壓縮級別 1-9,默認值:1(建議選擇為4),級別越高壓縮率越大,當然壓縮時間也就越長(傳輸快但比較消耗cpu)
    gzip_types      text/xml text/css application/javascript; #壓縮類型,匹配MIME類型進行壓縮,設置哪壓縮種文本文件可參考 conf/mime.types,(無論是否指定)text/html默認已經壓縮,默認不對js/css文件進行壓縮,不能用通配符 text/*
    gzip_proxied    off;    #作為反向代理的時候啟用,開啟或者關閉后端服務器返回的結果,匹配的前提是后端服務器必須要返回包含"Via"的 header頭。
                            #默認值:off [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any]
                            #off - 關閉所有的代理結果數據的壓縮
                            #expired - 啟用壓縮,如果header頭中包含 "Expires" 頭信息
                            #no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息
                            #no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息
                            #private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息
                            #no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭信息
                            #no_etag - 啟用壓縮 ,如果header頭中不包含 "ETag" 頭信息
                            #auth - 啟用壓縮 , 如果header頭中包含 "Authorization" 頭信息
                            #any - 無條件啟用壓縮
    gzip_vary       on;     #和http頭有關系,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費不支持的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮
    limit_zone      crawler $binary_remote_addr 10m; #開啟限制IP連接數的時候需要使用

    #upstream的負載均衡
    upstream luyucheng {
        ip_hash; #每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題
        
        server 192.168.80.1:80 weight=1; #weigth參數表示權重,權重越高被分配到的幾率越大
        server 192.168.80.2:80 down;     #down表示當前的server暫時不參與負載
        server 192.168.80.3:80 backup;   #當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標注的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用
        server 192.168.80.4:80 max_fails=3 fail_timeout=30s; #最大的重試次數,和重試時間間隔。最大失敗次數為3,也就是最多進行3次嘗試,且超時時間為30秒。max_fails的默認值為 1,fail_timeout的默認值是 10s。傳輸失敗的情形,由proxy_next_upstream或fastcgi_next_upstream指定。而且可以使用proxy_connect_timeout和proxy_read_timeout控制upstream 響應時間。upstream中只有一個server時,max_fails和fail_timeout參數可能不會起作用
        
        fair; #按后端服務器的響應時間來分配請求,響應時間短的優先分配
        
        hash $request_uri; #按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。注意:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數
        hash_method crc32; #使用的hash算法
    }
    
    #虛擬主機的配置
    server {
        listen       80;
        server_name  luyucheng.cnblogs.com cnblogs.com; #域名可以有多個,用空格隔開
        index        index.html index.htm index.php;
        root         /www/cnblogs;
        
        #日志格式設定
        log_format    access '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" $http_x_forwarded_for';

        access_log    /var/log/nginx/access.log access; #定義本虛擬主機的訪問日志
        
        #定義錯誤提示頁面
        error_page   500 502 503 504 /50x.html;  
        location = /50x.html {
            root     /root;
        }

        #對 "/yum" 啟用反向代理
        location /yum {
            proxy_pass          http://luyucheng
            proxy_redirect      http://luyucheng.cnblogs.com/yum http://luyucheng.cnblogs.com/yum/;
            proxy_set_header    X-Real-IP $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP

            #以下是一些反向代理的配置
            proxy_set_header Host      $host;
            client_max_body_size       10m;  #允許客戶端請求的最大單文件字節數
            client_body_buffer_size    128k; #緩沖區代理緩沖用戶端請求的最大字節數
            proxy_connect_timeout      90;   #nginx跟后端服務器連接超時時間(代理連接超時)
            proxy_send_timeout         90;   #后端服務器數據回傳時間(代理發送超時)
            proxy_read_timeout         90;   #連接成功后,后端服務器響應時間(代理接收超時)
            proxy_buffer_size          4k;   #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
            proxy_buffers              4 32k;#proxy_buffers緩沖區,網頁平均在32k以下的設置
            proxy_busy_buffers_size    64k;  #高負荷下緩沖大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;  #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
        }
        
        #PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
        location ~ \.php$ {
            root            /root;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include         fastcgi_params;
        }

        #設定查看Nginx狀態的地址
        location /NginxStatus {
            stub_status    on;
            access_log     off;
        }
        
        #HTTP Auth Basic模塊,該模塊采用基於HTTP基本身份驗證的用戶名和密碼登錄方式,來保護你的虛擬主機或目錄
        location /NginxAuth{
            auth_basic              "NginxAuth";   #用於指定彈出的用戶名和密碼登錄框中提示的名稱
            auth_basic_user_file    conf/htpasswd; #用於設置htpasswd密碼文件,htpasswd文件的內容可以用apache提供的htpasswd工具來產生
        }

        #所有靜態文件由nginx直接讀取
        location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { #緩存時間設置      
            expires  15d; #d(天) h(時) m(分) s(秒)
        }

        #圖片防盜鏈
        location ~* \.(gif|jpg|png)$ { #表示對gif、jpg、png后綴的文件實行防盜鏈
            valid_referers none blocked luyucheng.cnblogs.com *.cnblogs.com; #表示對url來源進行判斷,允許文件鏈出的域名白名單, cnblogs.com這個指的是子域名,域名與域名之間使用空格隔開
            if ($invalid_referer) {
                rewrite ^/ http://www.cnblogs.com/404.jpg; #如果不是指定來源就跳轉到http://www.cnblogs.com/404.jpg頁面,當然直接返回403也是可以的。
                #return 403;
            }
        }

        #禁止訪問 .htxxx 文件
        location ~ /\.ht {
            deny  all;
        }
    }
}

 


免責聲明!

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



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