nginx如何配置參數(shù)以及變量
配置詳解
1.daemon
:是否以守護(hù)進(jìn)程的方式運(yùn)行nginx
- daemon on | off ,默認(rèn)值為on;
2.master_process
:是否以master/worker方式工作
- master_process on | off ,默認(rèn)值為on;
- 在大多數(shù)情況下nginx還是以master進(jìn)程管理多個(gè)worker進(jìn)程的方式運(yùn)行的,關(guān)閉了master_process之后nginx將以master進(jìn)程來(lái)處理請(qǐng)求
3.error_log
:日志的設(shè)置; 格式: /path/file level, 默認(rèn)值為error_log logs/error.log error;
- /path/file參數(shù)為一個(gè)具體的文件。
- level的值可為:debug,info,notice,warn,error,crit,alert,emerg。
- level的級(jí)別從左往右級(jí)別依次增大,當(dāng)設(shè)定一個(gè)級(jí)別時(shí),大于或等于改級(jí)別的日志都會(huì)被輸出到path/file文件中,小于該級(jí)別的日志則不會(huì)輸出。
4.env
:定義環(huán)境變量
- env VAR | VAR=VALUE
- 這項(xiàng)配置能夠讓用戶直接設(shè)置操作系統(tǒng)上的環(huán)境變量。
5.include
:嵌入其他配置文件
- include配置能夠?qū)⑵渌渲梦募度氲疆?dāng)前的nginx.conf中,他的參數(shù)可以是絕對(duì)路徑,也可以是相對(duì)路徑(相對(duì)路徑主目錄為nginx.conf所在目錄)。
6.pid
:配置pid文件的路徑( path/file)
- pid文件保存著master進(jìn)程id。該文件會(huì)直接影響nginx的服務(wù)運(yùn)行。
7.user
:nginx worker進(jìn)程運(yùn)行的用戶及用戶組
- user username [groupname],默認(rèn)值為nobody;
- user用于配置master進(jìn)程啟動(dòng)后,fork出的worker進(jìn)程運(yùn)行在哪個(gè)用戶和用戶組下。
8.worker_rlimit_nofile
:指定nginx進(jìn)程可以打開(kāi)的最大文件個(gè)數(shù)。
- worker_rlimit_nofile limit;
9.worker_process
:nginx的worker進(jìn)程數(shù),默認(rèn)值1;
- 在master/worker運(yùn)行的方式下,定義worker進(jìn)程的個(gè)數(shù)。
- worker進(jìn)程的數(shù)量直接影響性能。
- worker進(jìn)程的配置與我們的實(shí)際業(yè)務(wù)需求有關(guān),每個(gè)worker進(jìn)程都是單線程的進(jìn)程,他們會(huì)調(diào)用各個(gè)模塊以實(shí)現(xiàn)多種多樣的功能。
- 如果能夠確定這些模塊不會(huì)出現(xiàn)阻塞的調(diào)用,那么有多少CPU內(nèi)核就應(yīng)該配置多少個(gè)進(jìn)程;反之,如果可能出現(xiàn)阻塞式調(diào)用,那么需要配置稍多一些的worker進(jìn)程。
- 多個(gè)worker進(jìn)程能夠充分利用多核系統(tǒng)架構(gòu),但若worker進(jìn)程的數(shù)量多于CPU內(nèi)核數(shù),那么會(huì)增大進(jìn)程間的切換帶來(lái)的消耗。
10.worker_cpu_affinity
:綁定nginx worker進(jìn)程到指定的cpu內(nèi)核。
worker_cpu_affinity cpumask; worker_process 4; #開(kāi)啟4個(gè)進(jìn)程 #2核cpu,開(kāi)啟4個(gè)進(jìn)程 worker_cpu_affinity 01 10 01 10; #4核cpu,開(kāi)啟4個(gè)進(jìn)程 worker_cpu_affinity 1000 0100 0010 0001;
- 為什么一定需要綁定CPU內(nèi)核?
- 假設(shè)每個(gè)worker進(jìn)程都是非常繁忙的,如果多個(gè)worker進(jìn)程都在搶同一個(gè)CPU,那么這就會(huì)出現(xiàn)同步問(wèn)題。
- 反之如果每個(gè)進(jìn)程都是獨(dú)享一個(gè)CPU,就在內(nèi)核調(diào)度策略上實(shí)現(xiàn)了完全的并發(fā)。
11.ssl_engine device
:硬件加速
- 如果服務(wù)器上有ssl硬件加速設(shè)備,那么就可以進(jìn)行配置以加快ssl協(xié)議的處理速度,可以通過(guò)OpenSSLengine
- -t命令查看是否具備ssl硬件加速設(shè)備
12.worker_priority
: nginx進(jìn)程的優(yōu)先級(jí)設(shè)置(指明worker進(jìn)程的nice值)
- worker_priority nice;默認(rèn)值為0;
13.accept_mutex
:是否打開(kāi)accept鎖
- accept_mutex on | off,默認(rèn)值為on;
- accept_mutex是nginx的負(fù)載均衡鎖,accept_mutex這把鎖可以讓多個(gè)worker進(jìn)程輪流的,序列化的與新的客戶端建立tcp連接。
- 當(dāng)某一個(gè)worker進(jìn)程建立的連接數(shù)量達(dá)到worker_connections配置的最大連接數(shù)的7/8時(shí),會(huì)大大地減小這個(gè)worker進(jìn)程試圖建立新tcp連接的機(jī)會(huì),以此實(shí)現(xiàn)所有worker進(jìn)程之上處理的客戶端請(qǐng)求數(shù)量接近。
14.lock_file
:lock文件的路徑
- lock_file path/file,默認(rèn)值:lock_file logs/nginx.lock;
- accept鎖需要這個(gè)文件,如果accept鎖關(guān)閉,lock_file配置完全不生效。
15.accept_mutex_delay
- 使用accept鎖后到真正建立連接之間的延遲時(shí)間,默認(rèn):accept_mutex_delay 500ms;
在使用accept鎖后,同一時(shí)間只有一個(gè)worker進(jìn)程能夠取到accept鎖。
這個(gè)accept鎖不是阻塞鎖,如果取不到會(huì)立刻返回。
如果有一個(gè)worker進(jìn)程試圖取accept鎖而沒(méi)有取到,它至少要等accept_mutex_delay定義的時(shí)間間隔后才能再次試圖取鎖。
16.multi_accept
: 批量建立新連接
- multi_accept[on]off],默認(rèn): multi_accept off,
- 當(dāng)事件模型通知有新連接時(shí),盡可能地對(duì)本次調(diào)度中客戶端發(fā)起的所有TCP請(qǐng)求都建立連接。
17.use
: 選擇事件模型
- use[ kqueue]rtsiglepoll/dev/pollselectpollleventport];默認(rèn):Nginx會(huì)自動(dòng)使用最適合的事件模型。
- 對(duì)于Linux操作系統(tǒng)來(lái)說(shuō),可供選擇的事件驅(qū)動(dòng)模型有poll、select、epoll三種。
- epoll當(dāng)然是性能最高的一種,epoll可以處理大并發(fā)連接。
18.worker_connections
:每個(gè)worker的最大連接數(shù)
- worker_connections number;
- 定義每個(gè)worker進(jìn)程可以同時(shí)處理的最大連接數(shù)。
19.全局變量
- $args 變量中存放了請(qǐng)求URL中的請(qǐng)求指令。比如
- http:/www.xxxx.com/index/index?argl=valuel&arg2=value2中的“argl=valuel&arg2=value2”
如下所示
$content_length
變量中存放了請(qǐng)求頭中的Content-length字段$content_type
變量中存放了請(qǐng)求頭中的Content-type字段$document_root
變量中存放了針對(duì)當(dāng)前請(qǐng)求的根路徑$document_uri
變量中存放了請(qǐng)求中的當(dāng)前URI,并且不包括請(qǐng)求指令,比如 http://www.xxxx.com/index/index?argl-value1&arg2-value2中的“/index/index$host
變量中存放了請(qǐng)求URL中的主機(jī)部分字段、比如http://www.xxxx.com/index中的"“www.xxxx.com”。如果請(qǐng)求中 的主機(jī)部分字段不可用或者為空,則存放Nginx配置中該server塊中server_name
指令的配置值$http_user_agent
變量中存放客戶端的代理信息$http_cookie
變量中存放客戶端的cookie信息$limit_rate
變量中存放Nginx服務(wù)器對(duì)網(wǎng)絡(luò)連接速率的限制,也就是Nginx 配置中 limit_rate指令的配置值$remote_addr
變量中存放了客戶端的地址$remote_port
變量中存放了客戶端與服務(wù)器建立連接的端口號(hào)$remote_user
變量中存放了客戶端的用戶名$request_body_file
變量中存放了發(fā)給后端服務(wù)器的本地文件資源的名稱$request_method
變量中存放了客戶端的請(qǐng)求方式,如""GET”、“POST等$request_filename
變量中存放了當(dāng)前請(qǐng)求的資源文件的路徑名$request_uri
變量中存放了當(dāng)前請(qǐng)求的URI,并且?guī)д?qǐng)求指令$query_string
與變量Sargs含義相同$scheme
變量中存放了客戶端請(qǐng)求使用的協(xié)議,比如“http”、“https”和“ftp”等$server_protocol
變量中存放了客戶端請(qǐng)求協(xié)議的版本,比如“HTTP1.0”、"HTTP/1.1”等$server_addr
變量中存放了服務(wù)器的地址$server_name
變量中存放了客戶端請(qǐng)求到達(dá)的服務(wù)器的名稱$server _port
變量中存放了客戶端請(qǐng)求到達(dá)的服務(wù)器的端口號(hào)uri
與變量uri與變量uri與變量document_uri含義相同
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用Nginx反向代理功能解決WEB網(wǎng)站80端口被封的解決方法
大陸的網(wǎng)絡(luò)環(huán)境,都在天朝神獸的制度下讓我等小P民悲劇一片;動(dòng)不動(dòng)就拔網(wǎng)線、封機(jī)房;現(xiàn)在更厲害的一招,從網(wǎng)關(guān)封殺你的80端口,一旦被封,網(wǎng)站域名就無(wú)法訪問(wèn)2012-08-08Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐
在我們實(shí)際生產(chǎn)中,一臺(tái)服務(wù)器的處理能力、存儲(chǔ)空間是有限的,這時(shí)候就需要負(fù)載均衡,本文詳細(xì)的介紹了Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03nginx location 配置 正則表達(dá)式實(shí)例詳解
本文通過(guò)實(shí)例代碼給大家介紹了nginx location 配置 正則表達(dá)式的問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07nginx FastCGI錯(cuò)誤Primary script unknown解決辦法
這篇文章主要介紹了nginx錯(cuò)誤Primary script unknown解決辦法,需要的朋友可以參考下2014-03-03Nginx中的root&alias文件路徑及索引目錄配置詳解
這篇文章主要介紹了Nginx中的root&alias文件路徑及索引目錄配置,順帶講解了root和alias命令的用法,需要的朋友可以參考下2016-01-01