前兩篇文章介紹了Nginx反向代理和動態路由:php
Ngnix技術研究系列1-經過應用場景看Nginx的反向代理html
Ngnix技術研究系列2-基於Redis實現動態路由nginx
隨着研究的深刻,很重要的一點就是了解Nginx各個配置和做用。整理一下分享給你們。後端
1、先說Nginx配置文件服務器
Nginx的配置文件是一個普通的純文本文件,使用了Nginx自定義的一套配置語法,更接近於腳本語言,混合了Shell、Perl和C的部分特性:cookie
Ngnix配置文件的默認位置在:網絡
/usr/local/openresty/nginx/conf/nginx.conf
能夠複製新建一個配置文件。session
2、進程配置併發
進程配置指令不屬於任何配置塊,只能在全局域(main)配置
worker_processes number | auto;
設置Nginx可以啓動的worker進程的數量,它直接影響Nginx的性能。一般當worker的數量與服務器的CPU核心數相等時,能夠獲取最佳的性能,這時每個worker都會工做在一個獨立的CPU核心上,徹底消除CPU調度的成本。(需配合worker_cpu_affinity指令)
Worker_processes的默認值是1. 若是不清楚服務器CPU核心數量,那麼能夠設置爲auto參數,Nginx會嘗試探測數量並設置。cat /proc/cpuinfo | grep processor
master_process on | off;
決定是否啓用Nginx的進程池機制,默認值是on,若是設置爲off,那麼Nginx不會創建master進程,只會用一個worker進程處理請求,worker_processes指令也會失效,併發處理能力大大降低。
worker_cpu_affinity auto [cpumask];
指定worker進程運行在某個CPU核心上,即CPU綁定,對於多核心的CPU來講能夠減小CPU切換,提升Cache命中率,讓Nginx更充分地利用CPU資源
Worker_processes 4;
Worker_cpu_affinity 0001 0010 0100 1000;
1.9.10以前,只能使用掩碼的方式手工綁定,如今則能夠用auto參數讓Nginx自動綁定CPU。app
worker_directory path;
配置Nginx的工做目錄,實際上僅用來存放coredump文件,在Nginx發生意外崩潰時能夠用gdb調試查找緣由。
3、運行日誌配置
在Nginx中運行日誌分爲兩種,記錄TCP/HTTP訪問請求的access_log和記錄服務器錯誤信息的error_log
error_log file|stderr level ;
指定Nginx的運行錯誤日誌,默認是安裝目錄下的logs/error.log 支持設置其餘路徑,或者使用標準錯誤輸出stderr。第二個參數level是日誌容許輸出級別,取值是debug|info|notice|warn|error|crit|alert|emerg, 只有高於這個級別的日誌纔會記錄下來,默認值是error
4、Events配置
Nginx採用事件驅動,利用操做系統內核提供的epoll、kqueue等系統調用來高效地處理網絡鏈接,events配置塊就是用來配置Nginx的事件機制。Events配置指令很少,默認配置就餓能夠工做的很好
worker_connections number;
設置每一個worker進程能夠處理的最大鏈接數量,它決定了Nginx的併發能力。這個指令決定了單個進程的處理能力。Nginx的總體最大可處理的鏈接數再乘上worker_processes的數量。
worker_connections的默認值是1024,可根據實際狀況適當增大。
5、Http配置
Nginx使用http塊配置HTTP相關的全部功能,包括cache、fastcgi、gzip、server、location、proxy、upsteam等。
http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}
resolver address … [valid=time] [ipv6=on|off]
配置域名解析服務器,不然Nginx將沒法正確解析域名的地址,沒法訪問後端的Web服務
keepalive_timeout timeout;
設置keepalive的超時時間,默認75s,主要用於客戶端複用Http長鏈接,提升服務器的性能,若是但願服務器發送數據後能主動斷開鏈接,能夠設置爲0
access_log path[format [buffer=size][flush=time][if=condition]];
access_log指令用於配置http的訪問日誌,日誌的格式由log_format決定,爲了優化磁盤讀寫,能夠設置buffer和flush選項,指定寫磁盤的緩衝區大小和刷新時間。 access_log /var/logs/nginx/access.log buffer=8k flush=1s;
6、Proxy配置
proxy_connect_timeout time;
與Nginx服務器創建鏈接的超時時間,通常不超過75s,示例:proxy_connect_timeout 60s;
proxy_cookie_domain off;
proxy_cookie_domain domain replacement;
HttpHeader中,重寫Set-Cookie中domain的配置,例如: proxy_cookie_domain localhost example.org;
proxy_read_timeout time;
該指令設置與代理服務器的讀超時時間。它決定了nginx會等待多長時間來得到請求的響應。這個時間不是得到整個response的時間,而是兩次reading操做的時間。
這個超時時間很重要,取決與調用方的超時配置,Nginx要小於等於調用方的超時配置
有個有價值的參考鏈接:http://yunjianfei.iteye.com/blog/2265918
當Nginx遇到報表查詢、導出功能?
http://blog.chinaunix.net/uid-182114-id-4700107.html
proxy_send_timeout time
該指令設置了發送請求給upstream服務器的超時時間。超時設置不是爲了整個發送期間,而是在兩次write操做期間。若是超時後,upstream沒有收到新的數據,nginx會關閉鏈接。默認60s。
周國慶
2017/10/25