Nginx之——配置文件解析

主配置文件(nginx.conf):javascript

user nginx nginx; #運行用戶css


worker_processes 8; #啓動進程數,通常等於CPU的總核數或兩倍,太多會佔用CPU增高。html


error_log /tol/app/nginx/logs/nginx_error.log crit; #定義錯誤日誌文件及級別,有 [debug|info|notice|warn|error|crit]前端


pid /tol/app/nginx/logs/nginx.pid; #定義PID文件java


worker_rlimit_nofile 51200; #和系統的單進程打開文件數一致,使用ulimit -SHn 65534 設置node


events{nginx

use epoll; #工做模式,有 [kqueue|rtsig|epoll|/dev/poll|select|poll]web

    worker_connections 51200; #單進程最大鏈接數,程序最大鏈接數=worker_connections*worker_processes算法

}後端

http{

    include       mime.types; #文件擴展名與文件類型映射表


    default_type application/octet-stream; #設置默認類型是二進制流,當類型未定義時使用二進制流的方式。好比未加裝PHP時,是不予解析,用瀏覽器訪問則出現下載窗口

server_names_hash_bucket_size 128; #服務器名字的hash表大小,不能帶單位

    client_header_buffer_size 128k; #客戶端請求頭部的緩衝區大小,這個能夠根據你的系統分頁大小來設置,通常一個請求頭的大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小

    large_client_header_buffers 4 128k; #客戶請求頭緩衝大小,4爲個數,128k爲大小,申請4個128k。nginx默認會用client_header_buffer_size這個buffer來讀取header值.

若是header過大,它會使用large_client_header_buffers來讀取.

若是設置太小HTTP頭/Cookie過大 會報400 錯誤nginx 400 bad request.

若是超過buffer,就會報HTTP 414錯誤(URI Too Long).

nginx接受最長的HTTP頭部大小必須比其中一個buffer大,不然就會報400的HTTP錯誤(Bad Request)。

    client_max_body_size 8m; #容許客戶端請求的最大單個文件字節數(nginx上傳文件的大小),若超出此值,報413 Request Entity Too Large


client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲先保存到本地再傳給用戶,若是把它設置爲比較大的數值,例如256k,那麼,不管使用firefox仍是IE瀏覽器,來提交任意小於256k的圖片,都很正常。若是註釋該指令,使用默認的client_body_buffer_size設置,也就是操做系統頁面大小的兩倍,8k或者16k,問題就出現了。不管使用firefox4.0仍是IE8.0,提交一個比較大,200k左右的圖片,都返回500 Internal Server Error錯誤


    sendfile on; #打開系統函數sendfile()支持,開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。

注意:若是圖片顯示不正常把這個改爲off。

    tcp_nopush     on; #此選項容許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用。參考:http://blog.csdn.net/zmj_88888888/article/details/9169227

也就是說tcp_nopush on 會設置調用tcp_cork方法。

這個也是默認的,結果就是數據包不會立刻傳送出去,等到數據包最大時,一次性的傳輸出去,這樣有助於解決網絡堵塞

    keepalive_timeout 60; #長鏈接超時時間,單位是秒


    tcp_nodelay on; #爲了發送小數據,好比10B如下的數據,會封裝一個帶有40B的IP包。若是每次都將這些小數據封裝成IP包,很容易形成網絡擁塞,因此就能夠設置是將多個小數據封裝成一個包(tcp_nodelay off)仍是封裝這些小數據成一個包(tcp_nodelay on)。tcp_nodelay和tcp_nopush是互斥的。不過若是你同時設置了兩個值的話,將會在第一個buf發送的時候,強制push數據,而第二個buf時,將會調用tcp_cork來打開nagle算法,也就是後面的都會應用tcp_nopush.

參考:http://www.pagefault.info/?p=228

#以上四項能夠提升文件傳輸性能

    server_tokens off; #關閉報錯時的Nginx版本顯示


    gzip on; #開啓gzip壓縮輸出


    gzip_min_length 1k; #從Content-Length中數值獲取驗證,小於1K會越壓越大


    gzip_buffers     4 16k; #以16K爲單位4倍的申請內存作壓縮結果流緩存,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。


    gzip_http_version 1.0; #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0)


    gzip_comp_level 2; #壓縮比率1-9,1壓縮比最小處理速度最快,9壓縮比最大但處理最慢且耗CPU


    gzip_types       text/plain application/x-javascript text/css application/xml; #壓縮類型,不管是否指定text/html老是會壓縮


    gzip_vary on; #此選項可以讓前端的緩存服務,如squid緩存通過nginx壓縮的數據


#limit_zone connlimit $binary_remote_addr 10m; #開啓限制IP鏈接數的時候須要使用,定義名爲connlimit的併發鏈接數限制空間,存儲10M的帶有二進制IP的會話信息,每一個會話信息是32bytes,10M應該能夠記錄320000個會話。配合limit_conn 使用。


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

#$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;

$remote_user:用來記錄客戶端用戶名稱;

$time_local: 用來記錄訪問時間與時區;

$request: 用來記錄請求的url與http協議;

$status: 用來記錄請求狀態;成功是200,

$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;

$http_referer:用來記錄從那個頁面連接訪問過來的;

$http_user_agent:記錄客戶瀏覽器的相關信息;

一般web服務器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,經過$remote_add拿到的IP地址是反向代理服務器的iP地址。

反向代理服務器在轉發請求的http頭信息中,能夠增長x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址;

    access_log off; #關閉訪問日誌


include /tol/app/nginx/conf/vhost/*.conf; #加載其餘的配置文件

}



虛擬主機配置文件:

upstream zhuanti { #設定負載均衡的服務器列表,名稱爲zhuanti

             server 127.0.0.1:8040;

             } 

server {

    listen 80;

    server_name zhuanti.test.com;

    root /tol/htdocs/zhuanti/ROOT;

    index index.html index.jsp index.htm;

    #limit_conn connlimit 20; #限制一個IP只能最多隻能發起20個鏈接,超過報 503 Service unavailable,與主配置文件裏配置的名稱對應。


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

      expires      1h; #緩存到客戶端的瀏覽器一個小時

    }


    location / {

#autoindex on; 開啓自動索引功能,通常用於能夠下載文件的服務器

#autoindex_exact_size on|off; 設定索引時文件大小的單位,默認爲on,單位是bytes,設爲off時單位(B、KB、MB、GB)

#autoindex_localtime on|off; 開啓以本地時間來顯示文件時間的功能

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|bingbot|360Spider") { #$http_user_agent 匹配客戶端agent信息

            proxy_pass http://ask2;

}

            proxy_pass      http://zhuanti/;

            proxy_redirect             off;

   #proxy_next_upstream  http_502 http_504 error timeout invalid_header; #若是後端服務器返回50二、50四、超時等錯誤自動將請求轉發到upstream負載均衡池中的另外一臺服務器。

            proxy_set_header           Host $host;

            proxy_set_header           X-Real-IP $remote_addr;

            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP

#以上三行,目的是將代理服務器收到的用戶的信息傳到真實服務器上

            client_max_body_size       50m;

            client_body_buffer_size    128k;

            proxy_connect_timeout      120; #nginx跟後端服務器鏈接超時時間_發起握手等候響應超時時間


            proxy_send_timeout         120; #後端服務器數據回傳時間_就是在規定時間以內後端服務器必須傳完全部的數據


            proxy_read_timeout         120; #鏈接成功後_等候後端服務器響應時間_其實已經進入後端的排隊之中等候處理(也能夠說是後端服務器處理請求的時間)


            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; #設置在寫入proxy_temp_path時數據的大小,預防一個工做進程在傳遞文件時阻塞太長

    }

access_log /tol/app/nginx/logs/zhuanti.log access;

location /nginxstatus {

            allow 127.0.0.1;

            deny all;

            stub_status on;

        access_log   off;

}

}

相關文章
相關標籤/搜索