原文: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。