一. 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表大小。
}