NGINX模組(一)

foreverfriends發表於2017-04-18
【NGINX核心模組】

1.主模組
該模組包含一些Nginx的基本控制功能。

指令1:daemon
語法:daemon on | off
預設值:on
daemon off;
說明:生產環境中不要使用"daemon"和"master_process"指令,這些選項僅用於開發除錯。你可以使用daemon off在生產環境中,
但對效能提升沒有幫助,在生產環境中永遠不要使用master_process off。

指令2:env
語法:env VAR|VAR=VALUE
預設值:TZ
使用欄位:main
說明:這個命令允許其限定一些主機變數的值,在以下的情況下會建立或修改變數的值:
(1)在零停機的情況下進行升級或增加、刪除一些模組時繼承的變數;
(2)使用於嵌入式perl模組;
(3)使用於工作中的程式,必須記住,管理行為的系統庫在同樣的方式下可能並不像頻繁的呼叫庫檔案那樣使用變數(僅僅當他們初始化時),
    即仍然可以用之前給定的命令設定,上面提到的零停機更新檔案是一個例外.如果TZ的值沒有被設定,那麼顯然它總是繼承並且總是
    可以訪問到嵌入式perl模組。

例:
env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;


指令3:debug_points
語法:debug_points [stop | abort]
預設值:none(無)
debug_points stop;
說明:在Nginx中有一些除錯斷點,它們允許Nginx使用偵錯程式,或者中止和建立核心檔案。


指令4:error_log
語法:error_log file [ debug | info | notice | warn | error | crit ]
預設值:${prefix}/logs/error.log
說明:指定Nginx服務(與FastCGI)錯誤日誌檔案位置。
每個欄位的錯誤日誌等級預設值:
1、main欄位 - error
2、HTTP欄位 - crit
3、server欄位 - crit

Nginx支援為每個虛擬主機設定不同的錯誤日誌檔案,這一點要好於lighttpd,詳細為每個虛擬主機配置不同錯誤日誌的例子請參考: SeparateErrorLoggingPerVirtualHost和mailing list thread on
separating error logging per virtual host

如果你在編譯安裝Nginx時加入了--with-debug引數,你可以使用以下配置:
error_log LOGFILE [debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_imap];
注意error_log off並不能關閉日誌記錄功能,它將日誌檔案寫入一個檔名為off的檔案中,如果你想關閉錯誤日誌記錄功能,應使用以下配置:
error_log /dev/null crit;


指令5:log_not_found
語法:log_not_found on | off
預設值:on
使用欄位:location
說明:這個引數指定了是否記錄客戶端的請求出現404錯誤的日誌,通常用於不存在的robots.txt和favicon.

ico檔案,例如:
location = /robots.txt {
log_not_found off;
}


指令6:include
語法:include file | *
預設值:none
說明:你可以包含一些其他的配置檔案來完成你想要的功能。0.4.4版本以後,include指令已經能夠支援檔案萬用字元:
include vhosts/*.conf;

【注意】直到0.6.7版本,這個引數包含的檔案路徑為你在編譯時指定的--prefix=目錄,
預設是/usr/local/nginx,如果你不想指定這個目錄下的檔案,請寫絕對路徑。
0.6.7版本以後指定的檔案路徑為nginx.conf所在的目錄,而不是prefix目錄的路徑。


指令7:lock_file
語法:lock_file file
預設值:編譯時指定
lock_file /var/log/lock_file;
說明:Nginx使用連線互斥鎖進行順序的accept()系統呼叫,如果Nginx在i386,amd64,sparc64,與ppc64環境
下使用gcc,Intel C++,或SunPro C++進行編譯,Nginx使用原子指示使互斥生效,在其他情況下鎖檔案會被使用。

指令8:master_process
語法:master_process on | off
預設值:on
master_process off;
說明:生產環境中不要使用"daemon"和"master_process"指令,這些選項僅用於開發除錯。


指令9:pid

語法:pid file
預設值:編譯時指定
pid /var/log/nginx.pid;
說明:指定pid檔案,可以使用kill命令來傳送相關訊號,例如你如果想重新讀取配置檔案,則可以使用:kill -HUP `cat /var/log/nginx.pid`

指令10:ssl_engine
語法:ssl_engine engine
預設值:依賴於系統環境
說明:這裡可以指定你想使用的OpenSSL引擎,你可以使用這個命令找出哪個是可用的:openssl engine -t
$ openssl engine -t
(cryptodev) BSD cryptodev engine
[ 可用 ]
(dynamic) Dynamic engine loading support
[ 不可用 ]

指令11:timer_resolution
語法:timer_resolution t
預設值:none
timer_resolution 100ms;
說明:這個引數允許縮短gettimeofday()系統呼叫的時間,預設情況下gettimeofday()在下列都呼叫完成後
才會被呼叫:kevent(), epoll, /dev/poll, select(), poll()。
如果你需要一個比較準確的時間來記錄$upstream_response_time或者$msec變數,你可能會用到timer_resolution.


指令12:try_files
語法:try_files path1 [ path2] uri
預設值:none
可用版本:0.7.27
說明:依次檢查存在的檔案,並且返回找到的第一個檔案,斜線指目錄:$uri / 。如果在沒有找到檔案的情況下,會啟用一個內部重定向到末尾引數,這個末尾引數“必須”被設定用來返回URL,否則會產生一個內部錯誤。在代理Mongrel中使用:

location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html @mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}


在Drupal / FastCGI中:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# other fastcgi_param
}
location @drupal {
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param QUERY_STRING q=$request_uri;
# other fastcgi_param
}
在這個例子中,這個try_files指令:
location / {
try_files $uri $uri/ @drupal;
}
等同於下列配置:
location / {
error_page 404 = @drupal;
log_not_found off;
}

這段:
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# other fastcgi_param
}

指try_files在將請求提交到FastCGI服務之前檢查存在的php檔案。
一個在Wordpress和Joomla中的例子:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# other fastcgi_param
}
location @wordpress {
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
# other fastcgi_param
}


指令13:user
語法:user user [group]
預設值:nobody nobody
說明:如果主程式以root執行,Nginx將會呼叫setuid()/setgid()來設定使用者/組,如果沒有指定組,那麼將使用與使用者名稱相同的組,
預設情況下會使用nobody使用者與nobody組(或者nogroup),或者在編譯時指定的--user=USER和--group=GROUP的值。

user www users;


指令14:worker_cpu_affinity
語法:worker_cpu_affinity cpumask [cpumask...]
預設值:none
僅支援linux系統。
說明:這個引數允許將工作程式指定到cpu,它呼叫sched_setaffinity()函式
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
指定每個程式到一個CPU:
worker_processes 2;
worker_cpu_affinity 0101 1010;
指定第一個程式到CPU0/CPU2,指定第二個程式到CPU1/CPU3,對於HTT處理器來說是一個不錯的選擇。


指令15:worker_processes
語法:worker_processes number
預設值:1
worker_processes 5;
說明:由於以下幾點原因,Nginx可能需要執行不止一個程式:
·使用了SMP(對稱多處理技術)。
·當伺服器在磁碟I/O出現瓶頸時為了減少響應時間。
·當使用select()/poll()限制了每個程式的最大連線數時。
在事件模組這一章中我們將使用worker_processes和worker_connections來計算理論最大連線數
(max_clients):
max_clients = worker_processes * worker_connections


指令16:worker_rlimit_core
語法:worker_rlimit_core size
預設值:
說明:允許的每個程式的核心檔案最大值。

指令17:worker_rlimit_nofile
語法:worker_rlimit_nofile limit
預設值:
說明:這個程式能夠開啟的最多檔案描述符數.

指令18:worker_rlimit_sigpending
語法:worker_rlimit_sigpending limit
預設值:
說明:linux核心2.6.8以後,指定限制的訊號數量可能是真實使用者佇列中正在呼叫的程式.

指令19:working_directory
語法:working_directory path
預設值:--prefix
說明:程式的工作目錄,一般只用來指定核心檔案位置,Nginx僅使用絕對路徑,所有在配置檔案中的
相對路徑會轉移到--prefix==PATH

20.變數
$nginx_version  :目前執行中的Nginx版本
$pid :程式ID號
$realpath_root:未標記


2.事件模組

Nginx處理連線的方式

指令1:accept_mutex
語法:accept_mutex [ on | off ]
預設值:on
說明:Nginx使用連線互斥鎖進行順序的accept()系統呼叫。

指令2:accept_mutex_delay
語法:accept_mutex_delay Nms;
預設值:500ms
如果一個程式沒有互斥鎖,它將至少在這個值的時間後被回收,預設是500ms

指令3:debug_connection
語法:debug_connection [ip | CIDR]
預設值:none
說明:0.3.54版本後,這個引數支援CIDR地址池格式。
這個引數可以指定只記錄由某個IP產生的debug資訊。
當然你也可以指定多個引數。
error_log /var/log/nginx/errors;
events {
debug_connection 192.168.1.1;
}
devpoll_changes
devpoll_events
kqueue_changes
kqueue_events


指令4:epoll_events
語法:devpoll_changes
預設值:
說明:這些引數指定了按照規定方式傳遞/來自核心的事件數,預設devpoll的值為32,其餘為512。

指令5:multi_accept
語法:multi_accept [ on | off ]
預設值:off
說明:multi_accept在Nginx接到一個新連線通知後呼叫accept()來接受盡量多的連線。


指令6:rtsig_signo
語法:rtsig_signo
預設值:
說明:Nginx在rtsig模式啟用後使用兩個訊號,該指令指定第一個訊號編號,第二個訊號編號為第一個加1
預設rtsig_signo的值為SIGRTMIN+10 (40)。

指令7:
rtsig_overflow_events
rtsig_overflow_test
rtsig_overflow_threshold
語法:rtsig_overflow_*
預設值:
說明:這些引數指定如何處理rtsig佇列溢位。當溢位發生在nginx清空rtsig佇列時,它們將連續呼叫poll()
和 rtsig.poll()來處理未完成的事件,直到rtsig被排空以防止新的溢位,當溢位處理完畢,nginx再次
啟用rtsig模式。
rtsig_overflow_events specifies指定經過poll()的事件數,預設為16
rtsig_overflow_test指定poll()處理多少事件後nginx將排空rtsig佇列,預設值為32
rtsig_overflow_threshold只能執行在Linux 2.4.x核心下,在排空rtsig佇列前nginx檢查核心以確定佇列
時怎樣被填滿的,預設值為1/10,“rtsig_overflow_threshold 3”意為1/3。


指令8:use
語法:use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]
預設值:
如果你在./configure的時候指定了不止一個事件模型,你可以通過這個引數告訴nginx你想使用哪
一個事件模型,預設情況下nginx在編譯時會檢查最適合你係統的事件模型。你可以在這裡看到所有可用的事件模型
並且如果在./configure時啟用它們。

指令9:worker_connections
語法:worker_connections
預設值:
worker_connections和worker_proceses(見主模組)允許你計算理論最大連線數:
最大連線數 = worker_processes * worker_connections
在反向代理環境下:
最大連線數 = worker_processes * worker_connections/4
由於瀏覽器預設開啟2個連線到伺服器,nginx使用來自相同地址池的fds(檔案描述符)與前後端相連線。

相關文章