Nginx Beginner`s Guide

原文地址:Beginner`s Guide
參考文檔:Nginx原理
本文翻譯自上述地址(Nginx官網新手指引),我自己感覺到不能表達正確的地方使用了原文挠日,可能還存在其他我沒有意識到的轉述錯誤殿较,文章僅供參考箍邮。

入門手冊

這份手冊將給出關于 nginx 的一個基本指引挠唆,和一些基于這些指引可以完成的簡單應用。這份手冊將假設閱讀者現在已經安裝了 nginx今魔。如果沒有勺像,出門左轉。這份手冊將會描述 nginx 的啟動错森、停止吟宦、配置重載,解釋配置文件涩维,同時怎么應用 nginx 作文件服務殃姓,怎么將nginx 配置成一個代理服務器,怎么通過 FastCGI Application 連接 nginx瓦阐。

nginx 有一個主進程(master process)和若干個子進程(worker process)蜗侈。主進程的作用是為了方便對配置文件進行管理,同時可以管理子進程睡蟋。是子進程在真正的處理請求(nginx employs event-based model and os-dependent mechanisms to efficiently distribute requests among worker process踏幻,漏了翻譯這句),子進程的數量是在配置文件中定義的薄湿。

配置文件描述了 nginx 及其模塊的運行叫倍。一般情況下,配置文件叫做 nginx.conf豺瘤,被放置在目錄 /usr/local/nginx/conf吆倦,/etc/nginx,或者 /usr/local/etc/nginx 下面坐求。

執(zhí)行蚕泽、停止和重載配置

運行可執(zhí)行的文件,就能開啟 nginx(to start nginx, run the executeable file)桥嗤。一旦 nginx 被開啟须妻,就可以通過調用 -s 參數來控制 nginx,像下面這個樣子

nginx -s signal

signal 可以為:

  • stop —— 快速關閉
  • quit —— 安全關閉
  • reload —— 重載配置
  • reopen —— 重載日志

比如泛领,當一個子進程正在處理請求荒吏,而你想停止它,可以使用

nginx -s quit

該命令應該由開啟 nginx 的用戶下達渊鞋。

只有當 nginx 收到重載的指令后(或者 nginx 被重啟)绰更,之前配置文件中的修改才會生效。重載配置锡宋,使用

nginx -s reload

一旦當主進程收到重載配置的指令儡湾,新配置文件中的語法合法性將會被檢查,新的配置也將被嘗試使用执俩。如果成功徐钠,主進程將開啟新的子進程,并且給舊的子進程發(fā)送指令役首,關閉舊的子進程尝丐。如果新的配置失敗显拜,主進程將會回滾,并且繼續(xù)使用舊的配置摊崭。舊的子進程會接收到指令讼油,停止接收新的請求,在處理完當前請求后關閉呢簸。

在一些 unix 工具的幫助下矮台,一些像 kill 這樣的指令也會被發(fā)送到 nginx。在這種情況下根时,指令通過進程 id 直接作用于 nginx 進程瘦赫。默認情況下,nginx 的主進程 id 會被寫在 /usr/local/nginx/logs 或者 /var/run 目錄下的 nginx.pid 文件中蛤迎。例如确虱,假設主進程的 id 是 1628,使用 QUIT 命令可以進行安全的關閉

kill -s QUIT 1628

可以通過使用 ps 命令來查看正在運行的 nginx 進程替裆,比如

ps -ax | grep nginx

獲取更多關于發(fā)送指令給 nginx 的信息校辩,請查看 Controlling Nginx

配置文件結構

nginx 由模塊組成辆童,這些模塊通過配置文件中一些特定準則來進行控制宜咒。這些準則被劃分為單準則和準則塊。單準則由名字和參數組成把鉴,名字和參數之間通過空格進行區(qū)分故黑,單準則以分號(;)結尾。準則塊和單準則具有相同的結構庭砍,但不同于分號场晶,準則塊使用一堆花括號結尾({ })。如果一個準則塊內部包含了其他準則怠缸,這些準則被稱為 context(比:events诗轻,httpserverlocation)揭北。

Directives placed in the configuration file outside of any contexts are considered to be in the main context...

以井號(#)開始的行是注釋扳炬。

文件服務(serving static content)

WEB服務器很重要的一個功能就是提供文件服務(圖片,靜態(tài)HTML頁面)罐呼。下面將提供一個實例,這個實例將會根據請求侦高,從服務器的不同目錄提供文件嫉柴。(/data/www,HTML目錄奉呛,/data/images计螺,圖片目錄)夯尽。為了完成這個實例,將需要修改配置文件登馒,并將一個包含兩個 location塊 的 server塊 放置到 http塊 中匙握。

首先,創(chuàng)建 /data/www 目錄陈轿,將 index.html(隨便寫點東西) 放到里面圈纺,然后再創(chuàng)建 /data/images 目錄,并往目錄里面塞一些圖片麦射。

接下來蛾娶,打開配置文件。默認的配置文件已經包含了一些 server塊 的示例潜秋,大部分以注釋的形式呈現』桌牛現在去掉 server塊 的注釋,并添加如下一個 server塊:

http {
server {
? }
}

總的來說峻呛,配置文件中可以包含很多 server塊罗售,這些 server塊 通過監(jiān)聽端口和服務名(server name)進行區(qū)分。一旦 nginx 決定了使用哪個 server 處理請求钩述,nginx 將會拿到請求頭中的 URI 與server塊 中的 location準則塊 進行參數比較寨躁。

在上面的 server塊 中添加下列 location塊。

location / {
? root /data/www;
}

這個 location塊 指定了當請求中的 URI 以 “/” 為前綴的時候的 nginx 處理規(guī)則切距。如果請求匹配了規(guī)則朽缎,URI 將會添加到 root規(guī)則 中聲明的路徑,也就是說會從/data/www路徑獲取請求文件谜悟。如果 location塊 中有多個地方可以匹配請求的 URI话肖,nginx 將選擇最長的那個。上面的 location塊 提供了最短的前綴葡幸,如果其他的 location塊 對URI的匹配都失敗了最筒,這個最短的將會被使用。

接下來蔚叨,添加第二個 location塊:

location /images/ {
? root /data/images;
}

這個規(guī)則將匹配以 /images/ 開始的請求(“/” 規(guī)則也可以匹配同樣請求床蜘,但 nginx 將選取最長的)。

最終的 server塊 將是下面這個樣子:

server {
? lcation / {
? root /data/www;
? }
? location /images/ {
? root /data/images;
? }
}

這就是一個在地址 http://localhost 監(jiān)聽標準端口 80蔑水,可以生效的一個 server 配置邢锯。作為對以 /images/ 開頭請求 URI 的回應,服務器將會發(fā)送 /data/images 目錄的文件搀别。比如丹擎,作為對 http://localhost/images/example.png 的回應,nginx 將會發(fā)送 /data/images/example.png 文件,如果不存在上述文件蒂培,nginx 將會發(fā)送一個 404再愈。不以 /images/ 開頭的請求將會去匹配 /data/www 目錄。比如护戳,作為對 http://localhost/some/exmaple.html 的回應翎冲,nginx 將發(fā)送 /data/www/some/example.html 文件。

想要讓新的配置生效媳荒,如果沒有開啟 nginx抗悍,那就開啟 nginx,或者再開啟了 nginx 的情況下使用 nginx -s reload肺樟。

當結果并沒有像期待的那樣時檐春,你可以去 /usr/local/nginx/logs 或者 /var/log/nginx 目錄中的 access.log 和 error.log 文件尋找原因。

簡單代理服務(setting up a simple proxy server)

ngixn 的一個廣泛用途是作為一個代理服務器么伯,這意味著 nginx 作為一個獲取請求疟暖,轉發(fā)給被代理的服務器,從被代理的服務器獲取內容田柔,然后轉發(fā)給客戶端的代理服務器俐巴。

接下來將配置一個基本的代理服務器,這個代理服務器將會從本地目錄獲取請求中的圖片硬爆,并將其他請求轉發(fā)給被代理的服務器欣舵。在這個例子中,兩個服務器都將是 nginx 服務器(both servers will be defined on a single nginx instance)缀磕。

首先缘圈,在被代理的服務器的配置中添加一個 server塊,內容如下:

server {
? listen 8080;
? root /data/up1;
? location / {
? }
}

這是一個監(jiān)聽了 8080 端口的簡單服務器(如果標準 80 端口沒有被使用的話袜蚕,這里是不用進行特別指定的)糟把,這個服務器將會去本地文件系統(tǒng)中的 /data/up1 目錄處理所有請求。創(chuàng)建 /data/up1 目錄牲剃,并放置 index.html遣疯。請注意 root 規(guī)則被放置到了 server 中。這種 root 規(guī)則將會在下面情況被使用凿傅,如果被匹配的 location塊 沒有自己的 root 規(guī)則缠犀。

接下來,使用之前的配置聪舒,并稍作修改就能使之成為一個代理服務器配置辨液。在第一個 location塊 中,將被代理服務器的協(xié)議箱残、名稱和端口號作為參數寫到 proxy_pass規(guī)則(這個例子中被代理的服務器時 http://localhost:8080):

server {
? location / {
? proxy_pass http://localhost:8080;
? }
? location /images/ {
? root /data/images;
? }
}

我們將修改當前從 /data/images/ 目錄匹配 /images/ 前綴第二個 location塊滔迈,使之可以匹配常見圖片后綴觉吭,像下面這樣:

location ~ \.(gif|jpg|png)$ {
? root /data/images;
}

這是一個用來匹配以 .gif蜓耻,.jpg浊仆,.png 結尾的 URI 的常用表達蜂奸。一個常用的表達應該使用 ~ 開頭谤狡。被匹配的請求將會到 /data/images 目錄皇耗。

當 nginx 選擇一個 location塊 來處理請求時法竞,首先會檢查可以匹配請求 URI 的 location規(guī)則退疫,記住最長的那個 location榜揖,然后才去匹配正則表達式的勾哩。如果有一個正則表達式匹配成功,nginx 將會選取這個 location举哟,或者選取之前記住的那個思劳。

最終的代理配置將會像下面這個樣子:

server{
? location / {
? proxy_pass http://localhost:8080/;
? }
? location ~ \.(gif|jpg|png)$ {
? root /data/images;
? }
}

這個服務器將匹配以 .gif,.jpg妨猩,.png 結尾的請求潜叛,并將其 map 到 /data/images 目錄(通過在 root規(guī)則 中添加參數),同時將其他所有請求轉發(fā)到上面配置中被代理的服務器壶硅。

關于代理服務器配置威兜,有以下更多規(guī)則可供參考。

FastCGI 代理配置

ngixn 可以用來為很多建立在不同框架和語言(比如PHP)的 FastCGI 應用提供 route requests庐椒。(nginx can be used to route requests to FastCGI servers which run applications built with various frameworks and programming laguages such as PHP)椒舵。

nginx 作為一個 FastCGI 服務器時最基本的配置包括 fastcgi_pass規(guī)則。fastcgi_param規(guī)則 可以為 FastCGI 服務器配置參數约谈。假設可以通過 localhost:900 訪問 FastCGI 服務笔宿。使用之前的段落作為一個基本的代理配置,使用 fastcgi_pass 規(guī)則替代 proxy_pass規(guī)則棱诱,并且將參數更改為 localhost:9000泼橘。在PHP中,參數 SCRITP_FILENAME 用來決定腳本名稱军俊,QUERY_STRING 參數用來通過請求參數侥加。最后的配置如下:

server {
? location / {
? fastcgi_pass localhost:9000;
? fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
? fastcgi_param QUERY_STRING $query_string
? }
? ? location ~ \.(gif|jpg|png)$ {
? root /data/images;
? }
}

This will set up a server that will route all requests except for requests for static images to the proxied server operating on localhost:9000 througn the FastCGI protocol.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市粪躬,隨后出現的幾起案子担败,更是在濱河造成了極大的恐慌,老刑警劉巖镰官,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件提前,死亡現場離奇詭異,居然都是意外死亡泳唠,警方通過查閱死者的電腦和手機狈网,發(fā)現死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拓哺,你說我怎么就攤上這事勇垛。” “怎么了士鸥?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵闲孤,是天一觀的道長。 經常有香客問我烤礁,道長讼积,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任脚仔,我火速辦了婚禮勤众,結果婚禮上,老公的妹妹穿的比我還像新娘鲤脏。我一直安慰自己们颜,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布猎醇。 她就那樣靜靜地躺著掌桩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姑食。 梳的紋絲不亂的頭發(fā)上波岛,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音音半,去河邊找鬼则拷。 笑死,一個胖子當著我的面吹牛曹鸠,可吹牛的內容都是我干的煌茬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼彻桃,長吁一口氣:“原來是場噩夢啊……” “哼坛善!你這毒婦竟也來了?” 一聲冷哼從身側響起邻眷,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤眠屎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肆饶,有當地人在樹林里發(fā)現了一具尸體改衩,經...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年驯镊,在試婚紗的時候發(fā)現自己被綠了葫督。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竭鞍。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖橄镜,靈堂內的尸體忽然破棺而出偎快,到底是詐尸還是另有隱情,我是刑警寧澤洽胶,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布滨砍,位于F島的核電站,受9級特大地震影響妖异,放射性物質發(fā)生泄漏。R本人自食惡果不足惜领追,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一他膳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绒窑,春花似錦棕孙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至订雾,卻和暖如春肢预,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洼哎。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工烫映, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人噩峦。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓锭沟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親识补。 傳聞我的和親對象是個殘疾皇子族淮,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容

  • Nginx簡介 解決基于進程模型產生的C10K問題,請求時即使無狀態(tài)連接如web服務都無法達到并發(fā)響應量級一萬的現...
    魏鎮(zhèn)坪閱讀 1,994評論 0 9
  • 1.簡介: ? Nginx:engine X ,2002年凭涂,開源祝辣,商業(yè)版? http協(xié)議:web服務器(類似于ht...
    尛尛大尹閱讀 1,862評論 0 3
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧切油!Ngi...
    JokerW閱讀 32,650評論 24 1,002
  • 1. Nginx的模塊與工作原理 Nginx由內核和模塊組成较幌,其中,內核的設計非常微小和簡潔白翻,完成的工作也非常簡單...
    rosekissyou閱讀 10,202評論 5 124
  • 1.ngnix介紹 ngnix www服務軟件 俄羅斯人開發(fā) 開源 性能很高 本身是一款靜態(tài)WWW軟件 靜態(tài)小文件...
    逗比punk閱讀 2,086評論 1 6