譯文。參考官方文檔
這篇指南描述瞭如何啓動、中止nginx,從新加載配置,而且解釋了配置文件的結構,描述瞭如何設置nginx去服務靜態內容,如何配置nginx做爲代理服務器等。html
nginx有一個主進程和若干個工做進程。主進程的主要目的就是讀取和評估配置,而且維護工做進程。工做進程其實是處理請求。nginx使用以事件爲基礎的模型而且依賴操做系統的機制去描述在工做進程中的請求。工做進程的數量定義在配置文件中,對於一個特定的配置,這個數量多是固定的,或者根據CPU的線程數來自動調整。nginx
nginx和它的模塊的工做方式是由配置文件決定的。默認狀況下,配置文件是以nginx.config
命名的,而且在/usr/local/nginx/conf
目錄,/etc/nginx
目錄,或者/usr/local/etc/nginx
目錄正則表達式
啓動nginx,運行可執行文件。一旦nginx已經啓動,它就能夠經過調用帶有-s
的參數來控制。使用語法:nginx -s signal
singal
能夠被下面任意一個替換數組
stop
- 快速中止quit
- 優雅的中止reload
- 從新加載配置文件reopen
- 從新打開日誌文件 例如,等全部工做進程完成服務器的當前請求時,中止nginx進程,用以下命令nginx -s quit
從新加載配置文件的命令發送到nginx或者nginx重啓的時候,配置文件改變的內容纔會生效。從新加載執行nginx -s reload
一旦主進程接收到從新加載的信號,它會檢查新的配置文件的語法是否合法,而且試着去執行配置文件裏的內容。若是成功了,主進程會開始新的工做進程而且發送信息給老的工做進程,請求它們中止。不然主進程就會回滾配置並繼續執行老的工做進程。老的工做進程接收到中止的命令,中止接收新的請求鏈接而且繼續執行當前的請求直到全部的請求都處理完成。
查看正在執行的nginx進程列表,用這個方式:ps -ax | grep nginx
服務器
nginx是由定義在配置文件中的指令所控制的模塊組成。這些指令被分紅簡單的指定和成塊的指令。一個簡單的指令由名稱和用空格、分號分隔開的參數組成。塊指令和簡單的指令有着相同的結構,可是替代分號的是,它是由一系列環繞在括號花括號周圍的附加的指令結尾。若是一個塊指令在內部的括號裏有其餘的指令,它被稱爲內容(列如:events
,http
,server
,location
)
處在配置文件中全部內容以外的指令被認爲是main
內容。events
和http
指令存在main
內容中,server
在http
,location
在server
併發
Web服務器一個重要的任務就是提供外部文件(好比像圖片或者靜態的HTML請求)。你能夠實現一個例子,根據請求文件將會從不一樣的目錄中提供:/data/www
裏面包含了HTML文件,/data/images
包括了圖片。這須要編輯配置文件而且要在http
塊中設置帶有兩個location
塊的服務塊。
首先,建立/data/wwww
文件夾而且在文件夾裏面放一個帶有一些文字內容的index.html
文件,而後建立/data/images
文件夾把一些圖片放進去。
下一步,打開配置文件,默認的配置文件已經包括了一些server
塊的例子,大多數是註釋掉了。如今註釋掉全部的塊,並開始一個新的server
塊。ide
http { server { } }
一般來講,配置文件可能包含一些經過監聽的端口或者服務名稱進行區分的server
塊。一旦nginx決定了哪個server去處理一個請求,它根據服務器塊中定義的位置指令的參數測試請求頭中指定的URI。
添加以下location
塊到server
塊中測試
location / { root /data/www; }
location
塊定義了「/」前綴同來自請求中的URI作比較。對於匹配的請求,這個URI會被添加到定義在root
指令的路徑中,也就是說,對於/data/www
,會在本地文件系統上造成被請求的路徑。若是有許多匹配的location
塊,nginx會選擇最長前綴的一個。上面的location
塊提供了長度是一的最短的前綴,因此只有其餘的location
塊沒法提供匹配是,纔會使用這個位置塊。
下一步,添加第二個位置塊ui
location /images/ { root /data; }
對於以/images
開始的請求將會有一個匹配(location /固然也配置這些請求,可是這是更短的前綴)
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/
開頭的URI請求將會匹配到/data/www
目錄。例如,響應http://localhost/some/example.html
的請求,nginx會發送/data/www/some/example.html
文件。
爲了讓新的配置生效,啓動nginx若是尚未啓動,若是啓動了就執行reload命令:nginx -s reload
以防事情沒有像預期那樣工做,你能夠試着在access.log和error.log找緣由,文件在/usr/local/nginx
或者/var/log/nginx
nginx使用最頻繁之一的就是把它設置爲代理服務器,這也就意味着服務接收請求,並把他們傳遞到代理服務器,而後從代理服務器取回響應併發送到客戶端。
咱們將配置一個基本的代理服務器,它使用本地目錄中的文件來處理圖像請求,並將全部的請求發送到一個代理服務器。在這個示例中,兩個服務器都定義在一個nginx實例。
首先,經過在nginx配置文件中添加一個包含以下內容的Server塊來定義代理服務器
server { listen 8080; root /data/up1; location / { } }
這將是一個監聽8080端口的簡單的服務器(很明顯,因爲使用了標準的80端口,因此listen
指定沒有被指定)而且將全部的請求映射到本地的/data/up1/
目錄。建立這個目錄而後把index.html
文件放到這個目錄下。注意的是root
指令被放在了server
內容裏。當爲處理請求選定的location
塊不包括本身的根指令的時候,使用這樣的root
指令。
下一步,使用上一小節的服務器配置塊並將其修改成代理服務器配置。在第一個location
塊中,將proxy_pass
指令和帶有代理服務器協議,名稱,端口號的參數放在一塊兒。
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
結尾的URI的正則表達式。全部的正則表達式都應該以~
開始。符合響應的請求將會映射到/data/images/
文件夾。
當nginx選擇一個location
塊去處理一個請求的時候,它首先要檢查指定前綴的location
指令,用最長前綴記住位置,而後檢查正則表達式。若是有匹配的正則表達式,nginx會挑選這個位置,不然的話會選擇以前記住的一個。
一個代理服務器的配置結果像這樣
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
服務器會過濾以.gif
,.jpg
,.png
結尾的請求而且映射到/data/images/
文件夾下面(經過添加root
指令的URI參數),而後將其餘的請求分配給上面配置的代理服務器。 爲了使新的配置文件生效,發送relaod信號給nginx