nginx初學者指南

原文:http://nginx.org/en/docs/beginners_guide.html

nginx安裝請百度或查看官網:https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/

本文介紹如何啓動停止nginx,加載它的配置,解釋配置文件結構,並介紹如何去搭建一個提供靜態內容的nginx服務器,以及怎樣配置 nginx 作爲一個代理服務器。

控制運行的NGINX進程

NGINX 啓動後,有一個主進程(master process)和一個或多個工作進程(worker process),主進程的作用主要是讀入和檢查NGINX的配置信息,以及維護工作進程;工作進程纔是真正處理客戶端請求的進程。工作進程個數由nginx.conf配置文件中的worker_processes指令定義,可以設置爲固定數字,也可以根據CPU核數自動調整。nginx.conf配置文件一般在/etc/nginx目錄。

可以通過以下這些命令來控制 NGINX:

nginx -s [ stop | quit | reopen | reload ]

其中:

  • nginx -s stop: 強制停止NGINX,不管工作進程當前是否正在處理用戶請求,都會立即退出。
  • nginx -s quit:“優雅地”退出NGINX,工作進程會將當前正在處理的請求處理完畢後,再退出。
  • nginx -s reload:重載配置信息,而無需重新啓動nginx。
  • nginx -s reopen:重新打開日誌文件。

配置文件結構

nginx由許多模塊(modules)組成,這些模塊由配置文件中的指令(directives)控制,指令分爲簡單指令和塊指令(block directives)。

簡單指令舉例:

user    nobody;
error_log    logs/error.log notice;
worker_processes    1;

塊指令舉例:

http {
    # Configuration specific to HTTP and affecting all virtual servers  
    server {
        # configuration of HTTP virtual server 1       
        location /one {
            # configuration for processing URIs starting with '/one'
        }
        location /two {
            # configuration for processing URIs starting with '/two'
        }
    } 
}

server塊指令定義了一個虛擬服務器去處理請求,其中的location指令定義瞭如何處理指定的URI。

如果塊指令中包含其他指令,這個塊指令稱爲上下文(context)。一般只在最外層的塊指令稱爲頂級塊指令,頂級塊指令處於main上下文中。頂級塊指令包含4種:

  • events – 處理一般連接
  • http – 處理HTTP 流量
  • mail – 處理郵件流量
  • stream – 處理TCP 和 UDP 流量

提供靜態內容

Web服務器的一個重要任務是提供文件(例如圖像或靜態HTML頁面)。

接下來我們實現一個例子:從本地目錄/data/www提供HTML文件(例如目錄中存放一個index.html,請求URI中不包含具體文件時默認提供index.html文件),並從本地目錄/data/images提供圖像文件。

修改nginx配置文件,新增一個http塊指令:

http {
    server {
        location / {
            root /data/www;
        }
        location /images/ {
            root /data;
        }
    }
}

通常,http上下文中可以包括多個server塊,監聽不同的端口和服務器名。 一旦 nginx 決定哪個server處理請求,它會根據在 server 塊級指令中定義好的 location 指令的參數,來匹配請求 URI。

上述配置已經是服務器的配置,它監聽默認端口80,並可以在本地計算機訪問http://localhost/

上述例子中的location塊指定了請求URI地址的前綴(//images/),如果存在多個匹配的前綴,選擇策略是最長匹配。對於請求URI匹配到了某前綴,就將這個請求URI拼接到root指令中指定的路徑後,以形成本地文件系統上所請求文件的路徑。例如對於http://localhost/images/example.png請求,nginx將發送/data/images/example.png文件。如果文件不存在,nginx將發送404錯誤的響應。 URI不以/images/開頭的請求將映射到/data/www目錄(這時匹配/),例如http://localhost/some/example.html請求,nginx將發送/data/www/some/example.html文件。

設置簡易代理服務器

nginx的一個常見用途是將其設置爲代理服務器,代理服務器轉發客戶端請求給被代理的服務器。

我們將配置一個基本代理服務器,它使用來自本地目錄的文件處理圖像請求,並將所有其他請求發送到被代理的服務器。

首先配置一個被代理的服務器。

server {
    listen 8080;
    root /data/up1;
    location / {
    }
}

這將是一個監聽端口8080的簡單服務器(未指定listen指令默認監聽80端口)並將所有請求映射到本地文件系統上的/data/up1目錄。 請注意,這時的root指令放在sever上下文中,當location塊不包括自己的root指令時,使用該root指令。

接下來,配置一個代理服務器。

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

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

第一個location指令中的proxy_pass指令定義被代理的服務器。
第二個location指令的參數是一個正則表達式,以~開頭。匹配以.gif.jpg.png結尾的所有URI。相應的請求將映射到/data/images目錄。

當nginx選擇一個location塊來處理請求時,它首先檢查指定前綴的location指令,記住具有最長前綴的location,然後按順序檢查正則表達式,如果有正則表達式匹配,則nginx選擇此location,否則選擇之前記住的那個location。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章