翻譯:nginx入門指引(一)

興趣使然的翻譯,業餘水平,nginx官方英文介紹文檔很不錯,惋惜中文網上好像沒有相應的翻譯。html

入門指引



啓動,中止和重載配置

配置文件的結構

服務靜態內容

創建簡單的代理服務器

創建FastCGI代理
nginx

這個指引對nginx作了一些簡單的介紹而且描述了一些它能夠完成的簡單任務。咱們假定讀者已經安裝了nginx,若是沒有的話,請看安裝nginx頁面。這個指引描述瞭如何啓動和中止nginx,以及重載它的配置、解釋了配置文件的結構以及如何讓nginx服務靜態內容、如何配置nginx使之成爲代理服務器、和如何用將它和一個FastCGI的應用鏈接起來。web

nginx有一個主進程和若干個工做進程。主進程的主要目的是讀取和分析配置文件以及管理工做進程。工做進程處理實際的請求。nginx使用了基於事件的模型和操做系統依賴型的機制來有效地向工做進程分發請求。工做進程的數量由配置文件定義,也能夠經過修改一個給定的配置文件中來改變,或者自動地根據cpu的核數進行調整(詳見工做進程正則表達式

nginx和它的模塊們的工做方式由配置文件決定,默認狀況下,配置文件名叫nginx.conf,它被放置在/usr/local/nginx/conf,/etc/nginx 或 usr/local/etc/nginx 目錄下。服務器

啓動,中止和重載配置

運行可執行文件來啓動nginx。一旦nginx被啓動,它能夠經過調用帶 -s 參數的可執行命令被控制。使用以下語法:框架

nginx -s signal工具

其中,signal 能夠是如下幾種之一:ui

  • stop —— 快速關閉
  • quit —— 平穩關閉
  • reload —— 重載配置文件
  • reopen —— 從新打開日誌文件

例如,當須要等待工做進程處理完當前請求時才關閉nginx,可使用如下命令:操作系統

nginx -s quit翻譯

這個命令應該由啓動nginx的用戶執行

對配置文件的更改不會當即生效直接到reload命令被執行或者nginx被重啓。執行reload命令:

nginx -s reload

一旦主進程收到重載配置文件的信號,它會檢查新配置文件的語法並嘗試應用其中的配置。若是應用成功了,它會啓動新的工做進程而且發送關閉的請求給舊的工做進程;不然,主進程回滾修改而且繼續使用舊的配置工做。舊的工做進程收到關閉的命令後,中止接收新的鏈接並繼續服務當前的請求直到全部這樣的請求都被服務。而後,舊的工做進程就會關閉。

一個信號也能夠經過unix工具被髮送給nginx的進程,好比kill。在這種狀況下,一個信號經過一個進程id直接被髮送給進程。默認狀況下,nginx的主進程id被記錄在 /usr/local/nginx/logs 或 /var/run 目錄下的nginx.pid文件裏。例如,若是主進程id是1628,爲了發送quit信號使nginx平穩關閉,能夠執行:
kill -s QUIT 1628

爲了得到全部運行中的nginx進程的列表,可使用ps命令,例如:
ps -ax | grep nginx
更多的關於發送信號的信息,參加控制nginx

配置文件的結構

nginx包含一些被配置文件中的指令控制的模塊。指令被分爲簡單指令和塊級指令兩種。一個簡單指令包含了由空格分開的名稱和參數,而且以分號結尾。一個塊級指令和簡單指令有同樣的結構,但它不使用分號結尾而使用一些被{(和)}包圍的額外結構來結尾。若是一個塊級指令中包含了其它指令,那麼它被稱爲一個上下文。好比events,http,server和location

#號後的內容是註釋

服務靜態內容

web服務器的一個重要任務是對外輸出文件,好比圖片和靜態網頁。你會實現一個這樣的例子:根據不一樣的請求,文件會從不一樣的本地目錄,如: /data/www (html) 和 /data/images 被輸出。這須要修改配置文件而且在http塊指令中創建帶有兩個location塊的server塊。

首先,建立/data/www的目錄而且放置一個index.html的文件,而後建立/data/images目錄並放置一些圖片

接下來,打開配置文件。默認的配置文件中已經包含了幾個server塊指令的例子,其中大多數被註釋掉了。如今,註釋掉全部這樣的塊指令而且創建一個新的server塊指令。

http {  
    server {  
    }  
}

一般一個配置文件會包含若干個server塊,並經過他們監聽的端口和他們的服務名稱來區分。一旦nginx決定了那個由哪一個server來處理一個請求,它就會檢驗請求頭部的URI並用location指令的參數和其對比,location塊被定義在server塊中。

location / {
    root /data/www;
}

這裏location塊聲明瞭一個"/"前綴來和請求中的URI進行對比。對於成功匹配的請求,URI會被添加到root指令聲明的路徑後面,造成一個在本地文件系統中對於所需文件的請求。若是有多個匹配的location塊,則nginx選擇最長前綴的那個。以上的location塊的前綴只有一個字符,是最短的,所以只有當其它location都匹配失敗時,這個location纔會被選擇。

如今,添加第二個location塊:

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/開頭的請求則被映射到/data/www目錄,好比:http://localhost/some/example.html被映射到/data/www/some/example.html文件。

創建簡單的代理服務器

nginx一個最多見的用途就是用做代理服務器,也就是把收到的請求傳遞給被代理的服務器,並從被代理服務器中取回響應,再將其發送給客戶端。

咱們會配置一個基本的代理服務器,對於圖片文件的請求,從本地目錄中發送文件,而對於其它的請求,則把請求轉發給另外一個被代理服務器。在這個例子裏,兩個服務器都會在一個單一的nginx實例中被定義。

首先,經過添加一個塊指令定義一個被代理服務器:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

這是一個監聽在8080端口的簡單服務器(以前咱們定義的server塊不聲明listen指令是由於使用了標準的80端口)而且會把全部請求映射到本地的 /data/upl 文件夾。建立這個文件夾而且放入一個index.html文件。注意,這裏的root指令被放在了server上下文中。當有一個location被選擇了而它的內部卻沒有root指令時,它就會使用server中的這個root指令。

接下來,修改在前一節中的server配置使它變爲一個代理服務器的配置。在第一個location塊中,添加proxy_pass指令,它的參數是被代理服務器的協議,名稱和端口。(本例中,參數是 http://localhost:8080):

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

咱們如今修改第二個location塊,使它由原先的匹配/images/前綴變爲匹配典型的圖片文件擴展名。修改後的location以下:

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

這個參數是一個匹配全部以.gif,.jpg或.png結尾的URI的正則表達式。~ 應該被寫在正則表達式前面。

當nginx選擇一個location時,它先檢查前綴,而且記錄匹配的location(最長前綴),而後nginx再檢查正則表達式,若是有一個正則表達式匹配,它就選擇這個location,不然,選擇以前記錄的location。

最終的代理服務器配置:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

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

如今,這個服務器能夠將以.gif,.jpg或.png結尾的請求映射到本機目錄,將其它全部請求發送到被代理服務器。

爲了使配置生效,要發送reload信號。

創建FastCGI代理

nginx能夠用來把請求路由給FastCGI服務器。FastCGI服務器能夠運行由多種框架和程序語言(如PHP)構建的應用。

最基本的配置方法是使用fastcgi_pass指令取代proxy_pass指令,而且用fastcgi_param指令設置參數。假設FastCGI服務器可訪問路徑是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代理服務器,能夠將靜態圖片之外的請求經過FastCGI協議傳遞給被代理服務器 localhost:9000

相關文章
相關標籤/搜索