nginx(一)

前言

  • 未來會(huì)圍繞nginx系列寫幾篇文章种玛。包含自己理解的藐鹤,用到的,學(xué)到的赂韵,希望和大家一起互相激勵(lì)娱节,發(fā)現(xiàn)、解決問題右锨,共同進(jìn)步括堤。

目錄

  • nginx簡(jiǎn)介
  • nginx特點(diǎn)和應(yīng)用場(chǎng)景
  • nginx配置結(jié)構(gòu)

nginx簡(jiǎn)介

\color{red}{nginx} (engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù)碌秸,也是一個(gè)IMAP/POP3/SMTP服務(wù)绍移。Nginx是由伊戈?duì)枴べ愃饕驗(yàn)槎砹_斯訪問量第二的Rambler.ru站點(diǎn)開發(fā)的,第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日讥电。
國(guó)內(nèi)分支Tengine


nginx特點(diǎn)和應(yīng)用場(chǎng)景

特點(diǎn)

  • 內(nèi)存消耗低
    在一般的情況下蹂窖,10000個(gè)非活躍的HTTP Keep-Alive 連接在Nginx中僅消耗2.5M的內(nèi)存,這也是Nginx支持高并發(fā)連接的基礎(chǔ)恩敌。
  • 高并發(fā)
    官方測(cè)試nginx能夠支撐5萬并發(fā)連接瞬测,實(shí)際生產(chǎn)環(huán)境中可以支撐2~4萬并發(fā)連接數(shù)。主要是因?yàn)閚ginx使用了最新的epoll(Linux2.6內(nèi)核)kqueue(freeBSD)網(wǎng)路I/O模型纠炮。
  • 熱部署
    nginx采用master管理進(jìn)程與worker工作進(jìn)程的分離設(shè)計(jì)月趟,使得nginx具有熱部署的功能,那么在7×24小時(shí)不間斷服務(wù)的前提下恢口,升級(jí)nginx的可執(zhí)行文件孝宗。也可以在不停止服務(wù)的情況下修改配置文件,更換日志文件等功能耕肩。
  • 其他
    配置文件簡(jiǎn)單因妇,穩(wěn)定性高,成本低廉猿诸,節(jié)省帶寬(gzip壓縮)婚被,開源社區(qū)活躍等等。

應(yīng)用場(chǎng)景

  • 反向代理
    反向代理應(yīng)該是Nginx做的最多的一件事了梳虽,反向代理方式是指以代理服務(wù)器來接受internet上的連接請(qǐng)求址芯,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端窜觉,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器谷炸。簡(jiǎn)單來說就是真實(shí)的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,所以需要一臺(tái)代理服務(wù)器竖螃,而代理服務(wù)器能被外部網(wǎng)絡(luò)訪問的同時(shí)又跟真實(shí)服務(wù)器在同一個(gè)網(wǎng)絡(luò)環(huán)境淑廊,當(dāng)然也可能是同一臺(tái)服務(wù)器,端口不同而已特咆。
    反向代理
  • 負(fù)載均衡
    當(dāng)有2臺(tái)或以上服務(wù)器時(shí)季惩,可以根據(jù)規(guī)則隨機(jī)的將請(qǐng)求分發(fā)到指定的服務(wù)器上處理录粱,負(fù)載均衡配置一般都需要同時(shí)配置反向代理,通過反向代理跳轉(zhuǎn)到負(fù)載均衡画拾。 而 Nginx 目前支持自帶3種負(fù)載均衡策略啥繁,還有2種常用的第三方策略。
  1. RR(默認(rèn)方式)
    每個(gè)請(qǐng)求按時(shí)間順序被分配到不同的后端服務(wù)器青抛,如果后端服務(wù)器掛掉旗闽,能自動(dòng)過濾。
  2. 權(quán)重(自帶)
    可以指定后端服務(wù)被訪問到的幾率蜜另。
  3. ip_hash(自帶)
    每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配适室,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器。
  4. fair(第三方)
    按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求举瑰,響應(yīng)時(shí)間短的優(yōu)先分配捣辆。
  5. url_hash(第三方)
    按訪問url的hash結(jié)果來分配請(qǐng)求,使url定向到同一個(gè)后端服務(wù)器此迅。
  • HTTP服務(wù)器
    nginx也是一個(gè)靜態(tài)資源的服務(wù)器汽畴,當(dāng)只有靜態(tài)資源的時(shí)候,就可以使用 Nginx 來做服務(wù)器耸序。當(dāng)然動(dòng)靜分離忍些,也可以通過 nginx 來實(shí)現(xiàn)。

nginx配置結(jié)構(gòu)

  • 總體結(jié)構(gòu)預(yù)覽(后面會(huì)在詳細(xì)介紹)
##
# 全局配置
##
user nobody;             ## 配置 worker 進(jìn)程的用戶和組
worker_processes auto;     ## 配置 worker 進(jìn)程啟動(dòng)的數(shù)量坎怪,建議配置為 CPU 核心數(shù)
error_log logs/error.log;  ## 全局錯(cuò)誤日志
pid /run/nginx.pid;        ## 設(shè)置記錄主進(jìn)程 ID 的文件
worker_rlimit_nofile 8192; ## 配置一個(gè)工作進(jìn)程能夠接受并發(fā)連接的最大數(shù)
##
# 工作模式及連接數(shù)上限
##
events {
   # epoll 是多路復(fù)用 IO(I/O Multiplexing)中的一種方式罢坝,
   # 僅用于 Linux 2.6 以上內(nèi)核,可以大大提高 Nginx 性能
   use epoll
   worker_connections 4096;  ## Defaule: 1024,單個(gè)后臺(tái) worker process 進(jìn)程的最大并發(fā)鏈接數(shù)
   # 并發(fā)總數(shù) max_clients = worker_professes * worker_connections
   # multi_accept on;  ## 指明 worker 進(jìn)程立刻接受新的連接
}
##
# http 模塊
##
http {
   ##
   # Basic Settings
   ##
   sendfile on;
   tcp_nopush on;
   tcp_nodelay on;
   keepalive_timeout 65;      ## 連接超時(shí)時(shí)間
   types_hash_max_size 2048;  ## 指定散列類型表的最大大小
   # server_tokens off;
   # server_names_hash_bucket_size 64;  # this seems to be required for some vhosts
   # server_name_in_redirect off;
   include /etc/nginx/mime.types;  ## 設(shè)定 mine 類型
   default_type application/octet-stream;
   # 設(shè)定請(qǐng)求緩沖
   client_header_buffer_size    128k; # 指定客戶端請(qǐng)求頭緩存大小芋忿,當(dāng)請(qǐng)求頭大于 1KB 時(shí)會(huì)用到該項(xiàng)
   large_client_header_buffers  4 128k; # 最大數(shù)量和最大客戶端請(qǐng)求頭的大小
   ##
   # SSL Settings
   ##
   # 啟用所有協(xié)議炸客,禁用已廢棄的不安全的SSL 2 和SSL 3
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
   # 讓服務(wù)器選擇要使用的算法套件
   ssl_prefer_server_ciphers on;

   ##
   # Logging Settings
   ##
   access_log /var/log/nginx/access.log;  ## 訪問日志
   error_log /var/log/nginx/error.log;    ## 錯(cuò)誤日志

   ##
   # Gzip Settings
   ##
   gzip on;
   gzip_disable "msie6";

}
  • nginx config配置詳解(后面會(huì)在詳細(xì)介紹)
    從上面nginx的總體結(jié)預(yù)覽中可以看出nginx config的總體配置大致
    分為5個(gè)部分
  1. 全局配置(user、worker_processes戈钢、error_log痹仙、pid)
    user nobody
    定義運(yùn)行nginx服務(wù)的用戶。如 user nobody nobody
    worker_processes
    定義nginx子進(jìn)程數(shù)量(提供服務(wù)的進(jìn)程數(shù)量)殉了,建議和服務(wù)cpu核數(shù)保持一致开仰。除了可以定義數(shù)字外,還可以定義為auto薪铜,表示讓系統(tǒng)自動(dòng)調(diào)整众弓。如:worker_processes 2 或 worker_processes auto
    error_log
    定義錯(cuò)誤日志的路徑,可以是相對(duì)路徑(相對(duì)prefix路徑的)隔箍,也可以是絕對(duì)路徑谓娃。也可以定義到http、server蜒滩、location里滨达,
    如:error_log logs/error.log;

    error_log 日志級(jí)別
    定義錯(cuò)誤日志級(jí)別奶稠,常見的錯(cuò)誤日志級(jí)別有(低到高順序):
    \color{blue}{debug|info|notice|warn|error|crit|alert|emerg}
    級(jí)別越高記錄的信息越少。如果不定義默認(rèn)是error
    如:error_log logs/error.log notice

    nginx pid 路徑
    定義nginx進(jìn)程pid文件所在路徑捡遍,可以是相對(duì)路徑锌订,也可以是絕對(duì)路徑。如:pid logs/nginx.pid
    worker_rlimit_nofile
    定義nginx最多打開文件數(shù)限制画株。如果沒設(shè)置的話辆飘,這個(gè)值為操作系統(tǒng)(ulimit -n)的限制保持一致。把這個(gè)值設(shè)高谓传,nginx就不會(huì)有“too many open files”問題蜈项。如:worker_rlimit_nofile 100000
  2. events(網(wǎng)絡(luò)連接相關(guān),worker_connections)
    worker_connections 1024
    定義每個(gè)work_process同時(shí)開啟的最大連接數(shù)良拼,即允許最多只能有這么多連接
    accept_mutex on
    當(dāng)某一個(gè)時(shí)刻只有一個(gè)網(wǎng)絡(luò)連接請(qǐng)求服務(wù)器時(shí)战得,服務(wù)器上有多個(gè)睡眠的進(jìn)程會(huì)被同時(shí)叫醒,這樣會(huì)損耗一定的服務(wù)器性能庸推。Nginx中的accept_mutex設(shè)置為on,將會(huì)對(duì)多個(gè)Nginx進(jìn)程(worker processer)接收連接時(shí)進(jìn)行序列化浇冰,防止多個(gè)進(jìn)程爭(zhēng)搶資源贬媒。默認(rèn)就是on
    multi_accept on
    nginx worker processer可以做到同時(shí)接收多個(gè)新到達(dá)的網(wǎng)絡(luò)連接,前提是把該參數(shù)設(shè)置為on肘习。默認(rèn)為off际乘,即每個(gè)worker process一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。
    use epoll
    Nginx服務(wù)器提供了多個(gè)事件驅(qū)動(dòng)器模型來處理網(wǎng)絡(luò)消息漂佩。
    其支持的類型有:select脖含、poll、kqueue投蝉、epoll养葵、rtsing、/dev/poll以及eventport瘩缆。
  • select:只能在Windows下使用关拒,這個(gè)事件模型不建議在高負(fù)載的系統(tǒng)使用
  • poll:Nginx默認(rèn)首選,但不是在所有系統(tǒng)下都可用
  • kqueue:這種方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系統(tǒng)中是最高效的
  • epoll: 這種方式是在Linux 2.6+內(nèi)核中最高效的方式
  • rtsig:實(shí)時(shí)信號(hào)庸娱,可用在Linux 2.2.19的內(nèi)核中着绊,但不適用在高流量的系統(tǒng)中
  • /dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64 UNIX 5.1A+操作系統(tǒng)最高效的方式
  • eventport: Solaris 10最高效的方式
  1. http(最重要的部分,大部分功能都放這里)
    下一章 nginx(二)中繼續(xù)介紹
  2. server(虛擬主機(jī)相關(guān))
    下一章 nginx(二)中繼續(xù)介紹
  3. location(server里面)
    下一章 nginx(二)中繼續(xù)介紹

https://www.cnblogs.com/yudis/articles/6676636.html
https://blog.csdn.net/propro1314/article/details/46924687

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熟尉,一起剝皮案震驚了整個(gè)濱河市归露,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斤儿,老刑警劉巖剧包,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腮考,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡玄捕,警方通過查閱死者的電腦和手機(jī)踩蔚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枚粘,“玉大人馅闽,你說我怎么就攤上這事♀善” “怎么了福也?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)攀圈。 經(jīng)常有香客問我暴凑,道長(zhǎng),這世上最難降的妖魔是什么赘来? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任现喳,我火速辦了婚禮,結(jié)果婚禮上犬辰,老公的妹妹穿的比我還像新娘嗦篱。我一直安慰自己,他們只是感情好幌缝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布灸促。 她就那樣靜靜地躺著,像睡著了一般涵卵。 火紅的嫁衣襯著肌膚如雪浴栽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天轿偎,我揣著相機(jī)與錄音典鸡,去河邊找鬼。 笑死贴硫,一個(gè)胖子當(dāng)著我的面吹牛椿每,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播英遭,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼间护,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了挖诸?” 一聲冷哼從身側(cè)響起汁尺,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎多律,沒想到半個(gè)月后痴突,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搂蜓,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年辽装,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帮碰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拾积,死狀恐怖殉挽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拓巧,我是刑警寧澤斯碌,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏未荒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一冠骄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘩绒,春花似錦猴抹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝙砌。三九已至阳堕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間择克,已是汗流浹背恬总。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肚邢,地道東北人壹堰。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像骡湖,于是被迫代替她去往敵國(guó)和親贱纠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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