[譯]Nginx入門引導教程

本文爲【Beginner’s Guide】譯文,原文地址:nginx.org/en/docs/beg…html

Guide

本教程基礎的介紹了 nginx,以及能使用nginx完成的簡單任務。本教程創建在讀者已經安裝了 nginx,若是並無,請移步 Installing nginx。本教程將包括如下內容:nginx

  • 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 —— 從新打開log文件

好比:你但願 等工做進程完成當前正在處理的請求後就中止 nginx 進程,可使用ide

nginx -s quit複製代碼

注意,執行這個命令的用戶要和啓動nginx的用戶是同一個。ui

若是你修改了配置文件,那麼你須要執行reload命令或者重啓nginx才能生效spa

nginx -s reload複製代碼

主進程在收到reload命令時,會去 檢查配置文件的語法 而且 嘗試 去應用配置的內容。若是成功,主進程就會啓動一個新的工做進程去發送信息命令其餘工做進程關閉;不然主進程將會 回滾,並應用回上一次的配置信息,工做進程繼續工做着。工做進程收到關閉的命令後將再也不接受新的客戶端請求,繼續完成手頭上的請求後關閉操作系統

在類 Unix 系統平臺上也能夠經過相似 kill 的命令向 nginx 發送消息,這樣的消息通常是直接發送給用進程ID標識的nginx 進程。nginx 的主進程ID默認是寫在 /usr/local/nginx/logs 或者 /var/run 目錄下的 nginx.pid。好比當前 nginx 主進程的進程ID是1628,能夠這樣代理

# 優雅的關閉nginx
* kill -s quit 1628 
# 經過 ps 能夠獲取到 nginx 進程號
* ps -ax | grep nginx複製代碼

更多的信息,請查看 Controlling nginx

配置文件

nginx 由模塊組成,這些模塊由配置文件中指定的指令控制。指令分爲 簡單指令指令塊

  • 簡單指令 - 由以分號結尾,空格分隔的鍵值對組成 [ key value ; ]
  • 指令塊 - 和簡單指令結構相同,可是使用一對大括號( {} )去包裹一組指令。
    包含其餘指令的指令塊稱爲 上下文 (好比events,http, server和location)

在配置文件中,塊級指令以外的區域稱之爲 主(根)上下文(main context) 。好比:events 和 http 指令是處在主上下文裏的,server 指令是處在 http 上下文裏中,location 指令又是處在 server 上下文裏中。

#主(根)上下文
http{
    server{
       location {
       }
    }
}複製代碼

同一行內 # 字符後的都是註釋

靜態資源服務

Web服務器的一項重要功能就是能充當 靜態服務器(如:圖片,靜態HTML文本)。好比你要實現這樣的情景:

根據不一樣的請求,nginx 能返回指定的文件資源

  • /data/images 目錄下的圖片
  • /data/www/ 目錄下的html文件。

只須要配置 nginx 文件,在 http 配置塊的 server 下寫兩個 location 塊。首先建立 /data/www 目錄,在這個目錄下創建 index.html 文件,裏面隨便寫點什麼內容​建立 /data/images 目錄,裏面放一些圖片。而後打開配置文件(文件中默認是配置有幾個 server 塊的,但大部分是被註釋掉的),把那些 server 都註釋掉在http 塊下從新配置一個 server 塊。

http{
    server{
    }
}複製代碼

通常來講,配置文件應該根據監聽端口號或者主機名分爲幾個 server 塊,而 nginx 到底把 http 請求交給哪一個 server 處理,則是根據請求的 URI 和 server 裏 location 指令的值的 匹配狀況 來處理的。下面咱們添加一個 location 到 server 中

location / {
    root /data/www;
}複製代碼

上述 location 的 "/" 前綴,是用來匹配 http 請求 URI 的。而它會添加到 root 指定的路徑下,也就是 /data/www,以此來造成 請求資源(文件)和本地文件系統的對應。若是有多個 location 和 URI 匹配的話,那就 優先選擇最長匹配的 location。第一個 location / 只提供了最短的前綴,長度爲1。因此,只有其餘 location 匹配失敗的狀況下才能使用第一個。

如今,咱們再添加一個location

location /images/ {
    root /data;
    }
}複製代碼

上述的 location 將會匹配一個以 /images/ 開始的 http 請求(location / 也會被匹配可是它更短)。配置好後,應該是相似下面的內容

http{
    server{
        location / {
            root /data/www;
        }
        location /images/ {
            root /data;
        }
    }
}複製代碼

這樣就配置了監聽標準 80 端口的 server,能夠經過 http://localhost 驗證。當請求 URI 以 /image/ 開頭,服務器將響應 /data/images/ 目錄下的文件

  • 例如:訪問 http://localhost/images/example.png,Web服務器會響應 /data/images/example.png
    若是該文件不存在,則返回 404 error。若是 URI 不是以 /images/ 開頭,那就映射到(更短的 location //data/www 目錄,
  • 例如:訪問 http://localhost/some/example.html,Web服務器將會把 /data/www/some/example.html 響應給客戶端。
    修改 nginx 配置文件以後,記得讓主進程從新讀取配置文件才能生效
nginx -s reload複製代碼

若是出錯的話,記得查看 access.log 和 error.log 日誌文件的內容。

日誌目錄通常在 /usr/local/nginx/log/ 或者 /var/log/nginx/ 裏。

配置簡單代理服務器

nginx 的一個常見用途是做爲 代理服務器

代理服務器是接受請求,轉發請求的到被代理的服務器,再從被代理的服務器獲取響應回傳給客戶端。

在下面這個例子中,咱們會配置一個簡單的代理服務器,直接返回靜態文件,其餘的則轉發給被代理的服務器。首先,編寫個server塊

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}
複製代碼

這樣就能提供一個簡單 監聽 8080 端口 的 server (這裏須要寫 listen 是由於以前默認的 80 端口已經被佔用了),這個 server 映射全部請求到本地 /data/up1 目錄。建立一個 index.html 文件到這個目錄下。注意,當 location 下未指定 root 目錄時將會使用 server 的 root 目錄(相似 默認值 )而後,修改配置文件 在先前 server 的第一個 location 處放入 proxy_pass,指定 **協議,域名,端口**,如:

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

    location /images/ {
        root /data;
    }
}複製代碼

修改第二個 localtion(映射 /images/ 開頭到本地目錄)成根據文件類型拓展名匹配

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

該參數是一個正則表達式,匹配以 .gif,.jpg 或 .png 結尾的全部 URI。正則表達式應該以〜開頭。相應的請求將映射到 /data/images 目錄。

nginx 在分發請求給 location 時,會 先選出最長的匹配前綴 的 location,而後去 檢查正則表達式,若是正則表達式匹配就選擇正則表達式所在的 location,不然就使用以前選出最長匹配 location

最終的代理服務器配置文件應該這樣:

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

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

這個 server 將會映射以 .gif,.jpg 或 .png 結尾的 URI 到 /data/images/ (root 對應的路徑)目錄下,其餘的請求將會 轉發給 proxy_pass 的代理服務器

更多代理配置的指令請移步 more

更多

更多優秀內容,能夠經過關注微信公衆號【極客收藏夾】獲取

wx

相關文章
相關標籤/搜索