nginx自學之路

一. nginx配置文件介紹:javascript

user nginx;#運行nginx的用戶css

worker_processes 4;#啓動幾個worker進程,ps -aux |grep nginx可查看。注:通常和CPU邏輯線程相同,使用grep -c processor /proc/cpuinfo命令查看。html

worker_cpu_affinity 0001 0010 0100 1000;  #將4個worker進程分配在4個CPU核心上。java

worker_rlimit_nofile 65535;   #一個worker進程最多打開的文件描述符的數量,應和ulimit -n命令:打開最多文件數量一致。node

worker_connections 1024;  #單個worker進程處理的最大併發連接數。nginx最大併發連接總數=worker_processes 乘於 worker_connectionsnginx

error_log logs/error.logs  warn;   #debug  info  notice  warn  error  crit  錯誤日誌級別越高,記錄的信息越少,配置等較高級別,會帶來巨大磁盤I/O消耗。瀏覽器

pid /usr/local/nginx/logs/nginx.pid   #pid進程文件存放目錄。緩存

 

events {服務器

use epoll;   #epoll網絡IO多路複用模型沒有對描述符的限制,相比select,poll來講比較靈活。多路複用:一個線程內交替併發的處理主動詢問的系統IO請求。網絡

 

}

 

http {

    include mime_types;    #文件默認在conf目錄下,根據文件類型來判斷如何處理給瀏覽器的文件是打開仍是下載。若是沒有相對應的文件擴展名則默認交給default_type處理下載。

    default_type application/octet-stream; #瀏覽器訪問到未定義的擴展名時,就默認爲下載各類格式的文件。設置改爲default_type text/html;告訴瀏覽器把全部未設置的擴展名當HTML文件打開。

    log_format zclwudi '$remote_add - $remote_user [$itme_local] "request" '         注:zclwudi爲日誌格式調用名。

                               '$status $body_bytes_sent "$http_referer" "$request_time" '

                               ' "$http_user_agent" "$http_x_forwarded_for" "$request_time" "$content_type" '

                               ' "$request_body" '; 

#nginx日誌變量介紹:

#$remote_add:記錄客戶端的ip地址。    $remote_user:記錄客戶端用戶名。   $itme_local:記錄訪問時間。 $request:記錄請求的URL    $http_x_forwarded_for:記錄代理的IP地址。

# $status:記錄nginx返回給客戶端的狀態碼。 $http_referer:記錄是從哪一個網頁連接訪問過來的。    $request_time:請求處理時間。   $http_user_agent:記錄客戶端瀏覽器的信息。

#body_bytes_sent:發送給客戶端的實際數據的字節數。

#優化系列

     server_tokens off;  #隱藏版本號

     sendfile on;            #開啓高效文件傳輸模式,nginx調用sendfile函數來傳輸文件。注:若圖片顯示不正常時改成off。

     tcp_nopush on;     # 開啓sendfile模式時才生效,防止網絡阻塞,減小了網絡報文段的數量,將響應頭和正文合在一個報文段發送。而不是一個一個發送。

     tcp_nodelay on;    #開啓sendfile模式時才生效,防止網絡阻塞告訴nginx不要緩存數據。

     keepalive_timeout 30;    #客戶端會話連接超時時間,

     client_header_timeout 10; #設置客戶端請求頭超時時間,nginx 若是超過這個時間沒有發送數據將返回request time  out錯誤。

     client_body_timeout 10; #設置客戶端請求主體超時時間,nginx 若是超過這個時間沒有發送數據將返回request time  out錯誤。

     send_timeout 10;  #設置nginx響應客戶端超時時間,如發送數據給客戶端,客戶端遲遲不接受,超過這個時間將超時。

     reset_timedout_connection on;    #刪除鏈接超時的客戶端,釋放內存空間。

 

#gzip壓縮文件:

     gzip on;    #開啓gzip壓縮功能。

     gzip_buffers 32 4k;    #在內存中存儲壓縮過的文件爲32塊每塊4k。最後一塊一塊的傳輸給瀏覽器。

     gzip_comp_level 6;   #壓縮級別分爲爲0-9,級別越高壓縮功能越強,同時也會消耗cpu的資源越高。建議折中6級別。

     gzip_min_length 200k;    #小於200k的文件不壓縮,過小的文件壓縮沒有意義啊,反而還耗費CPU的資源。

     gzip_types text/css text/xml application/javascript;    #壓縮哪些類型的文件。默認就壓縮text/html因此不用寫,能夠在mime.types文件中查看全部的壓縮文件。

     gzip_vary on;    #告訴瀏覽器個人文件是壓縮過的。nginx在header頭部中加入VARY標籤。

     gzip_disaple "MSIE [1-6]\.";    #若是是IE就不給他壓縮。

注:gzip通常不建議壓縮圖片,應爲效果並非很明顯並耗費CPU資源,圖片還有可能顯示的不正常。建議使用expires緩存設置。

 

#limit限制:

    limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s;    #http中配置,單個ip發送過來的請求,nginx每秒只處理一個請求。 zone:起一個區塊名字,申請佔用10MB的內存空間。

    limit_req zone=test burst=5 nodelay;    #location中配置,burst:表示可緩衝5個請求,第一次最多1秒處理6個請求,nodelay:表示當即處理緩衝中的請求,若是不設置則burst不生效。

 

    limit_conn_zone $binary_remote_addr zone=addr:10m;    #http中配置,$binary_remote_addr是$remote_addr的二進制格式,固定佔用4個字節,而$remote_addr按照字符串存儲,佔用7-15個字節。

    limit_conn addr 5;    #location中配置,限制單個IP最大併發鏈接數爲5,超過最大鏈接數時返回503。

 

    limit_rate_after 3m;#http中配置,限速模塊,前3M下載時不限速
    limit_rate 512k; #http中配置,限速爲每秒512KB。注:這裏是對每一個鏈接限速,而不是對ip限速,若是一個ip有兩個併發連接,那麼這個ip就限速爲limit_rate * 2。

 

     

 

 

     server_names_hash_bucket_size 128;    #設置存儲,服務器名字的hash表大小。

     

}

相關文章
相關標籤/搜索