Nginx Beginner's Guide

概述

  譯文。參考官方文檔
  這篇指南描述瞭如何啓動、中止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內容。eventshttp指令存在main內容中,serverhttp,locationserver併發

提供靜態內容

  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

相關文章
相關標籤/搜索