原文連接:http://nginx.org/en/docs/begi...
轉自個人github
有些地方以爲翻譯的不是很合理,因此在括號中寫出了原句。
若是有地方翻譯的不合理,請多多指教。html
啓動、中止和重啓加載配置nginx
配置文件結構git
提供靜態內容github
設置一個簡單的代理服務器正則表達式
設置FastCGI代理編程
本指南提供了一個關於nginx基本介紹並描述了一些能夠用它完成的簡單的任務。
咱們假設nginx已經安裝在讀者的電腦上。若是還未安裝請看「安裝nginx」章節。本指南描述如何啓動、中止和重啓它的配置文件,解釋了配置文件的結構並描述瞭如何設置nginx如何服務靜態內容、如何配置nginx做爲一個代理服務器以及如何將它與FastCGI應用鏈接。服務器
nginx有一個主進程和多個工做進程。主進程的目的是爲了讀取和評估配置並保持工做進程。
工做進程則作請求的實際處理。nginx採用基本的事件模型和操做系統依賴性機制來有效地分配工做進程之間的請求。
工做進程的數量能夠在配置文件中定義,也能夠給出一個固定值,又或者調節到CPU內核可用的數量。
參閱:worker_processes併發
nginx和它的模塊工做方式是在配置文件中定義的。默認狀況下,這個配置文件名爲nginx.conf
。放置在/usr/local/nginx/conf
,/etc/nginx
或者/usr/local/etc/nginx
目錄。框架
要啓動nginx,運行可執行文件。一旦nginx被啓動,它能夠經過調用-s
參數來執行控制。使用一下命令:編程語言
nginx -s signal
signal能夠是如下之一:
stop — 快速關機
quit — 正常關機
reload — 從新加載配置文件
reopen — 從新打開日誌文件
例如,要中止nginx等待工做進程完成服務當前請求的進程,能夠執行如下命令:
nginx -s quit
執行此命令的用戶應與啓動nginx的用戶一致。
在配置文件中的修改是不會被應用的,直到從新加載的命令被傳送到nginx或者從新啓動。
從新加載配置,執行:
nginx -s reload
一旦主進程接收到信號從新加載配置文件,它會檢查新配置文件語法的合法性並嘗試應用。
若是成功,主進程會開啓新的工做進程,併發送消息告訴舊的工做進程,請求他們快速中止。
反之,主進程會回滾配置文件修改的部分,繼續使用舊的配置。舊的工做進程接收到快速中止的命令,會中止接受新的鏈接請求,它會繼續服務當前的請求直到請求被服務結束。在那以後,舊的進程會退出。
一個信號也能夠在Unix工具的幫助下傳送到nginx進程,如kill
工具。在這種狀況下,會直接把信號傳送給所指定的進程ID的進程。nginx主進程的進程ID被寫入,默認狀況下,nginx.pid在/usr/local/nginx/logs
或者/var/run
目錄下。好比,若是主進程ID是1628,要傳送QUIT
信號來中止nginx,執行:
kill -s QUIT 1628
爲了獲取正在運行的nginx進程列表,可使用ps工具,好比,如下方式:
ps -ax | grep nginx
有關發送信號給nginx的更多信息,請參閱Controlling nginx。
nginx是由模塊組成的,這些模塊在配置文件中又有指定的指令。
指令被分紅簡單指令和塊指令。簡單指令包括名稱和用空格分割的參數以及用來結尾的分號(;)。
一個塊指令和簡單指令有相同的結構,可是它使用大括號({and})來包圍一系列說明來替代使用分號做爲結尾。
若是一個塊指令在大括號中有其餘的指令,則稱之爲上下文(如:events,http,server, 和location)。
放在配置文件最外面的指令的稱之爲主文,event
,http
指令在主文中;server
在http
中,location
在server
中。
‘#’開頭的其它行是註釋。
Web服務器一個重要的任務就是提供文件(如圖像或者靜態html頁面)。
根據需求,你將實現一個例子,文件被本地不一樣的目錄服務着,如/data/www
包含html文件,/data/images
包含圖片。這須要編輯配置文件,在http塊中設置server塊。
首先,建立/data/www
目錄並放置index.html文件(文件中能夠是任意內容)。
而後建立/data/images
目錄並放置一些圖片。
接下來,打開配置文件。默認的配置文件已經包含了幾個server塊的例子,大多數都被註釋掉了。
如今註釋掉全部的塊,並開始一個新的server塊。
http { server { } }
通常狀況下,配置文件中包含多個server塊,它們之間以監聽的端口號和server name來區分。
一旦nginx決定了哪一個server處理請求,它測試在請求的對server塊內定義的位置指令的參數頭中指定的URI。
(it tests the URI specified in the request’s header against the parameters of the location directives defined inside the server block.)
將location塊添加到server塊中,以下:
location / { root /data/www; }
與請求的URI相比,location塊指定了「/」前綴。爲了匹配請求,該URI會被添加到root指令指定的路徑中,
即,到/data/www
,在本地文件系統中組成請求文件的路徑。若是有多個匹配的location塊,nginx會選擇前綴最長的。
上面的location塊提供了最短的前綴,若是其餘的location塊匹配失敗,這個location塊就會被使用。
接下來添加第二個location塊:
location /images/ { root /data; }
它與帶/images/
的請求請求匹配。(location / ,固然也匹配,除非有更短的前綴。)
(It will be a match for requests starting with /images/ (location / also matches such requests, but has shorter prefix).)
配置文件中server塊應是這樣的:
server { location / { root /data/www; } location /images/ { root /data; } }
這已是一個能夠工做的服務器配置文件,它監聽的是80端口,可在本地經過http://localhost/
訪問。
響應帶/images/
的URI路由請求時,服務器將會從/data/images
目錄發送文件。
例如,響應 http://localhost/images/example.png
路由請求,nginx將會發送/data/images/example.png
文件。若是這個文件不存在,nginx將會發出404錯誤的響應。不帶/images/
的URIs請求將會映射到/data/www
目錄。
例如,爲了響應http://localhost/some/example.html
請求,nginx將會發送/data/www/some/example.html
文件。
爲了應用新的配置,若是還沒開啓nginx請開啓,或者向nginx的主進程發送從新加載的信號,執行:
nginx -s reload
萬一沒有像預期的那樣工做,您能夠嘗試在` /usr/local/nginx/logs`或者`/var/log/nginx`目錄中的 access.log和error.log文件找到緣由。
nginx最經常使用的功能之一就是將其設置爲代理服務器,這將意味着服務器接受請求,並將請求傳送給代理服務器,
而後從代理服務器取回響應,並將取回的響應發送給客戶端。
咱們將會配置一個基礎版本的代理服務器,它能夠服務來自本地目錄的圖片文件請求,並將全部其它請求發送給代理服務器。
在這個例子中,全部的服務器都被定義爲一個單一的nginx實例。
首先,定義代理服務器經過在nginx的配置文件增長一個額外的server塊,如下爲添加的內容:
server { listen 8080; root /data/up1; location / { } }
這是一個簡單的server塊,監聽8080端口(此前,listen指令沒有被提起是因爲已經使用了標準的80端口),並將全部的請求
映射到本地文件系統的/data/up1
目錄。建立這個目錄,並將index.html文件放置其中。注意root指令已經被放置在server環境中。
當location塊被選中服務請求時,root指令就會被使用,固然不包括本身的root指令。
(Such root directive is used when the location block selected
for serving a request does not include own root directive.)
接下來,使用上一節服務器配置並修改它,使其變成一個代理服務器配置。在第一個location塊中,放置proxy_pass
指令與協議、
名稱和參數中指定的代理服務器端口。(在咱們的例子中,是http://localhost:8080):
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
咱們將會修改第二個location塊,它目前映射全部帶/images/
前綴的請求到/data/images
目錄下的文件,是爲了使其符合典型的文件擴展的圖像請求。修改的location塊應該是這樣:
location ~ \.(gif|jpg|png)$ { root /data/images; }
該參數是一個正則表達式,匹配全部.gif,.jpg,.png 結尾的路由。正則表達式應該優於~。相應的請求都會被映射到/data/images
目錄。
當nginx選擇一個location塊服務一個請求時,它首先檢查location指令的指定前綴,記住location最長的前綴,
而後檢查正則表達式。若是有一個匹配的正則表達式,nginx會挑選location塊,不然它會選擇以前的。
所以代理服務器的配置文件應該是這樣的:
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
此服務器會篩選出以.gif,.jpg,.png 結尾的請求,並將他們映射到/data/images
目錄下(經過添加URI到root指令的參數上),
而後經過全部其它請求到代理服務器配置上。
爲了應用新的配置文件,發送reload信號到nginx,正如前面的章節所描述的那樣。
還有更多的指令可用於進一步配置代理連接。
nginx可用於路由請求FastCGI服務器,FastCGI服務器運行各類不一樣的框架和編程語言,如PHP,創建的應用。
最經常使用與 FastCGI server工做的nginx配置,用fastcgi_pass
指令替代了proxy_pass
指令,並設置fastcgi_param
參數傳遞給FastCGI server。假設FastCGI server經過localhost:9000
能夠訪問。
以上一節代理配置做爲基礎,用fastcgi_pass
指令替換proxy_pass
指令,並修改參數爲localhost:9000
。在PHP中,SCRIPT_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; } }
這將會設置一個服務器,會經過全部的請求,除了靜態圖像的請求到代理服務器,經過FastCGI協議運行在localhost:9000上。