<深入理解nginx> 二 nginx的配置

本文包含內(nèi)容
(1)配置文件  
(2)配置文件的語(yǔ)法格式 
(3)運(yùn)行服務(wù)需要具備的基礎(chǔ)配置
(4)使用http核心模塊配置靜態(tài)web服務(wù)器的方法
(5)反向代理服務(wù)器
part 1     運(yùn)行進(jìn)程的關(guān)系
part 2      配置的語(yǔ)法
塊配置項(xiàng):一個(gè)塊配置項(xiàng)名 和 一對(duì)大括號(hào)組成
配置項(xiàng)的語(yǔ)法格式 
A 如果配置項(xiàng)值中包括語(yǔ)法符號(hào),例如空格符,需要使用單引號(hào)或者雙引號(hào)包括配置項(xiàng)目值,每行配置的結(jié)尾需要加上分號(hào)
配置項(xiàng)名 配置項(xiàng)值1 配置項(xiàng)值2 ...;
B 配置項(xiàng)的注釋 #
C 配置項(xiàng)的單位
千字節(jié)  K   兆字節(jié)  M
時(shí)間單位 ms毫秒  s   m分鐘   h   d天  w周  M月  y年
D 使用變量
只有少數(shù)模塊支持變量的使用 , 使用時(shí)候在變量的前面加上 $  
注:大部分的模塊都必須在nginx.conf中讀取某個(gè)配置項(xiàng)后,才會(huì)在運(yùn)行時(shí)候啟用
part 3 基本配置
至少必須加載幾個(gè)核心模塊和一個(gè)事件類(lèi)模塊,這些模塊運(yùn)行時(shí)候所支持的配置項(xiàng)目稱(chēng)為基本配置-所有其他的模塊執(zhí)行時(shí)都依賴(lài)的配置項(xiàng)
A 用于調(diào)試進(jìn)程和定位問(wèn)題的配置項(xiàng)
a 是否以守護(hù)進(jìn)程方式運(yùn)行nginx
默認(rèn)是daemon on;
守護(hù)進(jìn)程表示脫離終端并且在后臺(tái)運(yùn)行的進(jìn)程
b 是否以master/worker方式工作
默認(rèn)是master_process on;
是以一個(gè)master進(jìn)程管理多個(gè)worker進(jìn)程的方式運(yùn)行
c error日志的設(shè)置
error日志是定位nginx問(wèn)題的最佳工具,可以根據(jù)需求設(shè)置error日志的路徑和級(jí)別
默認(rèn)的路徑是 error_log logs/error.log error;
默認(rèn)情況下是/logs/error.log文件,需要講文件放在一個(gè)磁盤(pán)空間足夠大的位置
關(guān)閉日志文件的唯一方式:將log路徑設(shè)置為/dev/null
level 是日志的輸出級(jí)別,取值范圍是 
debug info notice warn error crit alert emerg 從左到右依次增大
當(dāng)設(shè)定為一個(gè)級(jí)別時(shí)候,大于或者等于該級(jí)別的日志都會(huì)被輸出到日志文件中
注意:如果日志級(jí)別設(shè)定到debug,必須在configure 時(shí)候加入--with-debug配置項(xiàng)
d 是否處理幾個(gè)特殊的調(diào)試點(diǎn)
用于幫助用戶(hù)跟蹤調(diào)試,
如果設(shè)置為debug_points stop ,nginx的代碼執(zhí)行到調(diào)試點(diǎn)后,會(huì)發(fā)出SIGSTOP信號(hào),用于調(diào)試;如果設(shè)置為debug_points abort,會(huì)產(chǎn)生一個(gè)coredump 文件,通常不使用此選項(xiàng)
e  僅對(duì)指定的客戶(hù)端輸出debug級(jí)別的日志
這個(gè)配置項(xiàng)屬于事件類(lèi)配置,需要放在events{...}
舉例:
events {
debug_connection 192.168.1.1;
}
僅僅來(lái)自192.168.1.1的請(qǐng)求才會(huì)輸出debug級(jí)別的日志,其他請(qǐng)求仍然使用error_log中配置的日志級(jí)別,上面配置對(duì)于修復(fù)bug很有用,特別是高并發(fā)請(qǐng)求下,會(huì)發(fā)生的問(wèn)題
f  限制coredump 核心轉(zhuǎn)儲(chǔ)文件的大小
當(dāng)進(jìn)程發(fā)生錯(cuò)誤或者收到信號(hào)而終止時(shí)候,系統(tǒng)會(huì)將進(jìn)程執(zhí)行時(shí)候的內(nèi)存內(nèi)容寫(xiě)入一個(gè)文件,core文件,作為調(diào)試用-核心轉(zhuǎn)儲(chǔ)core dumps
當(dāng)nginx進(jìn)程出現(xiàn)一些非法操作時(shí)候,導(dǎo)致進(jìn)程直接被操作系統(tǒng)強(qiáng)制結(jié)束時(shí)候,會(huì)生成核心轉(zhuǎn)儲(chǔ)core文件,可以從core文件中獲取當(dāng)時(shí)的堆棧和寄存器信息,幫助定位
worker_rlimit_core size;
可以限制core文件的大小,有效幫助用戶(hù)定位問(wèn)題
g  指定coredump 文件生成目錄
working_directory path;
worker進(jìn)程的工作目錄,設(shè)置coredump文件所放置的目錄,協(xié)助定位問(wèn)題

B 正常運(yùn)行的配置項(xiàng)
a  定義環(huán)境變量 env VAR|VAR=VALUE
舉例:  env TESTPATH = /tmp/;
用戶(hù)直接設(shè)置操作系統(tǒng)上的環(huán)境變量
b  配置其他的配置文件
include /path/file
舉例:
include mime.types;
include vhost/*.conf;
可以將其他的配置文件通過(guò)include配置項(xiàng)嵌入到當(dāng)前的nginx.conf文件中
參數(shù)既可以是絕對(duì)路徑,也可以是相對(duì)nginx.conf所在目錄的相對(duì)路徑,參數(shù)的值可以是一個(gè)明確的文件名,也可以是含有通配符的文件名,可以一次嵌入多個(gè)配置文件
c pid文件的路徑
默認(rèn)路徑是 pid logs/nginx.pid;
保存master進(jìn)程ID的pid文件存放的路徑,默認(rèn)和configure執(zhí)行的參數(shù)所指定的路徑是相同的,也可以隨時(shí)修改,文件直接影響nginx是否可以運(yùn)行
可以從nginx.pid中直接查看pid,使用sudo kill pid 停止nginx服務(wù)
d nginx worker進(jìn)程運(yùn)行的用戶(hù)和用戶(hù)組
默認(rèn)是  user nobody nobody;
user 用于設(shè)置master進(jìn)程啟動(dòng)后,fork(生成子進(jìn)程)出的worker進(jìn)程運(yùn)行在哪個(gè)用戶(hù)和用戶(hù)組下面,如果沒(méi)有指定groupname ,默認(rèn)和用戶(hù)名相同
若是在configure 命令執(zhí)行時(shí)候,使用了參數(shù)
--user=username --group=groupname
此時(shí)在nginx運(yùn)行的時(shí)候,將使用參數(shù)中指定的用戶(hù)和用戶(hù)組
e 指定nginx worker進(jìn)程可以打開(kāi)的最大文件句柄數(shù)
設(shè)置一個(gè)進(jìn)程可以打開(kāi)的最大的文件的句柄數(shù)
worker_rlimit_nofile limit;
f 限制信號(hào)隊(duì)列
設(shè)置每個(gè)用戶(hù)發(fā)往nginx的信號(hào)隊(duì)列的大小,當(dāng)某個(gè)用戶(hù)的信號(hào)隊(duì)列滿(mǎn)了,再發(fā)送信號(hào)將被丟掉
worker_rlimit_sigpending limit;
C 優(yōu)化性能的配置項(xiàng)
a 進(jìn)程個(gè)數(shù)   
默認(rèn)是   work_processes 1;
worker進(jìn)程的數(shù)量直接影響性能,每個(gè)worker進(jìn)程都是單線(xiàn)程的進(jìn)程,會(huì)調(diào)用各個(gè)模塊實(shí)現(xiàn)多種多樣的功能,如果這些模塊確定不會(huì)出現(xiàn)阻塞式調(diào)用,進(jìn)程個(gè)數(shù)等于內(nèi)核個(gè)數(shù),但是如果會(huì)出現(xiàn)阻塞式調(diào)用,需要配置稍多一些的worker進(jìn)程
進(jìn)程少:業(yè)務(wù)方面致使用戶(hù)請(qǐng)求大量讀取本地磁盤(pán)上的靜態(tài)資源文件,服務(wù)器的內(nèi)存較小,大部分的請(qǐng)求訪問(wèn)靜態(tài)資源文件必須讀取磁盤(pán),不是內(nèi)存中的磁盤(pán)緩存,磁盤(pán)I/O調(diào)用會(huì)阻塞worker進(jìn)程少量時(shí)間,導(dǎo)致性能下降
進(jìn)程多:多worker進(jìn)程可以充分利用多核系統(tǒng)架構(gòu),若是worker進(jìn)程數(shù)量大于內(nèi)核數(shù)量,會(huì)增大進(jìn)程之間切換帶來(lái)的消耗
b  綁定nginx worker進(jìn)程到指定的cpu內(nèi)核
舉例:如果有四顆cpu內(nèi)核
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;
每一個(gè)worker進(jìn)程都是非常繁忙的,如果多個(gè)worker進(jìn)程搶同一個(gè)cpu,就會(huì)出現(xiàn)同步問(wèn)題,如果每個(gè)worker進(jìn)程獨(dú)享一個(gè)cpu,在內(nèi)核的調(diào)度策略中實(shí)現(xiàn)了完全的并發(fā)
c  SSL硬件加速
d  系統(tǒng)調(diào)用gettimeofday的執(zhí)行效率
e  進(jìn)程優(yōu)先級(jí)設(shè)置
D  事件類(lèi)配置項(xiàng)
a   是否打開(kāi)accept 鎖
默認(rèn)是   accept_mutext on;
accept_mutex 是nginx的負(fù)載均衡鎖,這把鎖可以讓多個(gè)worker 進(jìn)程輪流的 序列化 和新的用戶(hù)建立 tcp連接
當(dāng)worker建立的連接數(shù)量達(dá)到最大連接數(shù)的7/8時(shí)候,將大大減小worker進(jìn)程試圖建立新的tcp連接的機(jī)會(huì),實(shí)現(xiàn)所有的worker進(jìn)程上的處理的用戶(hù)請(qǐng)求的數(shù)量盡量接近
accept鎖默認(rèn)是打開(kāi)的,如果關(guān)閉,建立tcp連接的耗時(shí)將會(huì)更短,但worker進(jìn)程之間的負(fù)載將會(huì)非常不均衡,因此不建議關(guān)閉它
b  lock文件的路徑
默認(rèn)路徑是   lock_file logs/nginx.lock;
accept鎖可能需要lock文件,如果accept鎖關(guān)閉,lock_file配置完全不生效,如果打開(kāi)了accept鎖,由于元素導(dǎo)致nginx不支持原子鎖,這時(shí)候才會(huì)用文件鎖實(shí)現(xiàn)accept鎖,lock文件才會(huì)生效
c   使用accept鎖后到真正建立連接之間的延遲時(shí)間
在使用accept鎖后,同一時(shí)間只有一個(gè)worker進(jìn)程可以取到accept鎖,如果取不到會(huì)立刻返回,至少再等定義時(shí)間間隔后才能再次試圖取鎖
舉例:
accept_mutex_delay 500ms;
d   批量建立新的連接
默認(rèn)是  multi_accept off;
當(dāng)事件模型通知有新的連接時(shí)候,盡可能對(duì)本次調(diào)度中的客戶(hù)端發(fā)起的所有tcp請(qǐng)求都建立連接
e   選擇事件模型
默認(rèn)是  nginx會(huì)自動(dòng)使用最適合的事件模型
可供選擇的事件驅(qū)動(dòng)模型有 poll select epoll 三種,epoll 是性能最高的一種
f   每個(gè)worker的最大連接數(shù)
worker_connections number;
定義每個(gè)進(jìn)程可以同事處理的最大連接數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,610評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,939評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,668評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,004評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,173評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,426評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,656評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,833評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,247評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,580評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,371評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,621評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容

  • 第一章 Nginx簡(jiǎn)介 Nginx是什么 沒(méi)有聽(tīng)過(guò)Nginx?那么一定聽(tīng)過(guò)它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,745評(píng)論 24 1,002
  • 上一篇《WEB請(qǐng)求處理一:瀏覽器請(qǐng)求發(fā)起處理》,我們講述了瀏覽器端請(qǐng)求發(fā)起過(guò)程,通過(guò)DNS域名解析服務(wù)器IP,并建...
    七寸知架構(gòu)閱讀 81,135評(píng)論 21 356
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,829評(píng)論 18 139
  • 提供沉浸式狀態(tài)欄,可調(diào)用黑色狀態(tài)欄模式,判斷了小米MIUI和flyme系統(tǒng)獨(dú)立的黑色狀態(tài)欄樣式可獨(dú)立調(diào)用,提供了一...
    kongzue閱讀 1,118評(píng)論 1 4
  • 我家有一個(gè)植物角,里面有許多的植物,各種各樣的,漂亮極了! 植物數(shù)不勝數(shù),有...
    快樂(lè)思齊閱讀 815評(píng)論 0 0