nginx 的問題

 

主模塊(Main Module)

 

回目錄

·摘要

包含一些Nginx的基本控制功能

·指令

daemon

語法:daemon on | off
默認值:on
daemon off;
生產環境中不要使用"daemon"和"master_process"指令,這些選項僅用於開發調試。你可使用daemon off在生產環境中,但對性能提高沒有幫助,在生產環境中永遠不要使用master_process off。

env

語法:env VAR|VAR=VALUE
默認值:TZ
使用字段:main
這個命令容許其限定一些主機變量的值,在如下的狀況下會建立或修改變量的值:

·在零停機的狀況下進行升級或增長、刪除一些模塊時繼承的變量
·使用於嵌入式perl模塊
·使用於工做中的進程,必須記住,管理行爲的系統庫在一樣的方式下可能並不像頻繁的調用庫文件那樣使用變量(僅僅當他們初始化時),即仍然能夠用以前給定的命令設置,上面提到的零停機更新文件是一個例外

若是TZ的值沒有被設置,那麼顯然它老是繼承而且老是能夠訪問到嵌入式perl模塊
例:
env  MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;

debug_points

語法:debug_points [stop | abort]
默認值:none(無)
debug_points stop;
在Nginx中有一些調試斷點,它們容許Nginx使用調試器,或者停止和創建核心文件。

error_log

語法:error_log file [ debug | info | notice | warn | error | crit ]
默認值:${prefix}/logs/error.log
指定Nginx服務(與FastCGI)錯誤日誌文件位置。
每一個字段的錯誤日誌等級默認值:

一、main字段 - error
二、HTTP字段 - crit
三、server字段 - crit

Nginx支持爲每一個虛擬主機設置不一樣的錯誤日誌文件,這一點要好於lighttpd,詳細爲每一個虛擬主機配置不一樣錯誤日誌的例子請參考:SeparateErrorLoggingPerVirtualHostmailing 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;
一樣注意0.7.53版本,nginx在讀取配置文件指定的錯誤日誌路徑前將使用編譯的默認日誌位置,若是運行nginx的用戶對該位置沒有寫入權限,nginx將輸出以下錯誤:
[alert]: could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)

log_not_found

語法:log_not_found on | off
默認值:on
使用字段:location
這個參數指定了是否記錄客戶端的請求出現404錯誤的日誌,一般用於不存在的robots.txt和favicon.ico文件,例如:
location = /robots.txt {
log_not_found off;
}

include

語法:include file | *
默認值:none
你能夠包含一些其餘的配置文件來完成你想要的功能。
0.4.4版本之後,include指令已經可以支持文件通配符:
include vhosts/*.conf;
注意:直到0.6.7版本,這個參數包含的文件路徑爲你在編譯時指定的--prefix=目錄,默認是/usr/local/nginx,若是你不想指定這個目錄下的文件,請寫絕對路徑。
0.6.7版本之後指定的文件路徑爲nginx.conf所在的目錄,而不是prefix目錄的路徑。

lock_file

語法:lock_file file
默認值:編譯時指定
lock_file  /var/log/lock_file;
Nginx使用鏈接互斥鎖進行順序的accept()系統調用,若是Nginx在i386,amd64,sparc64,與ppc64環境下使用gcc, Intel C++,或SunPro C++進行編譯,Nginx使用原子指示使互斥生效,在其餘狀況下鎖文件會被使用。

master_process

語法:master_process on | off
默認值:on
master_process  off;
生產環境中不要使用"daemon"和"master_process"指令,這些選項僅用於開發調試。

pid

語法:pid file
默認值:編譯時指定
pid /var/log/nginx.pid;
指定pid文件,可使用kill命令來發送相關信號,例如你若是想從新讀取配置文件,則可使用:kill -HUP `cat /var/log/nginx.pid`

ssl_engine

語法:ssl_engine engine
默認值:依賴於系統環境
這裏能夠指定你想使用的OpenSSL引擎,你可使用這個命令找出哪一個是可用的:openssl engine -t
$ openssl engine -t
(cryptodev) BSD cryptodev engine
[ 可用 ]
(dynamic) Dynamic engine loading support
[ 不可用 ]

timer_resolution

語法:timer_resolution t
默認值:none
timer_resolution  100ms;
這個參數容許縮短gettimeofday()系統調用的時間,默認狀況下gettimeofday()在下列都調用完成後纔會被調用:kevent(), epoll, /dev/poll, select(), poll()。
若是你須要一個比較準確的時間來記錄$upstream_response_time或者$msec變量,你可能會用到timer_resolution

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
}

user

語法:user user [group]
默認值:nobody nobody
若是主進程以root運行,Nginx將會調用setuid()/setgid()來設置用戶/組,若是沒有指定組,那麼將使用與用戶名相同的組,默認情 況下會使用nobody用戶與nobody組(或者nogroup),或者在編譯時指定的--user=USER和--group=GROUP的值。
user www users;

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處理器來講是一個不錯的選擇。

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

worker_rlimit_core

語法:worker_rlimit_core size
默認值:
容許的每一個程序的核心文件最大值。

worker_rlimit_nofile

語法:worker_rlimit_nofile limit
默認值:
這個進程可以打開的最多文件描述符數

worker_rlimit_sigpending

語法:worker_rlimit_sigpending limit
默認值:
linux內核2.6.8之後,指定限制的信號數量多是真實用戶隊列中正在調用的進程

working_directory

語法:working_directory path
默認值:--prefix
程序的工做目錄,通常只用來指定核心文件位置,Nginx僅使用絕對路徑,全部在配置文件中的相對路徑會轉移到--prefix==PATH

·變量

$nginx_version

目前運行中的Nginx版本

$pid

進程ID號

$realpath_root

未標記

·參考文檔

前進->事件模塊(Events Module)

相關文章
相關標籤/搜索