本文介紹如何將NGINX配置作為Web服務器,并包括以下部分:
1. 設置虛擬服務器
2. 配置位置
3. 使用變量
4. 返回特定狀態碼
5. 重寫請求中的URI
6. 重寫HTTP響應
7. 處理錯誤
在高層次上,將NGINX配置作為Web服務器有一些問題需要了解,定義它處理哪些URL以及如何處理這些URL上的資源的HTTP請求。 在較低層次上,配置定義了一組控制對特定域或IP地址的請求的處理的虛擬服務器。
用于HTTP流量的每個虛擬服務器定義了稱為位置的特殊配置實例,它們控制特定URI集合的處理。 每個位置定義了自己的映射到此位置的請求發生的情況。 NGINX可以完全控制這個過程。 每個位置都可以代理請求或返回一個文件。 此外,可以修改URI,以便將請求重定向到另一個位置或虛擬服務器。 此外,可以返回特定的錯誤代碼,也可以配置特定的頁面以對應于每個錯誤代碼。
#### 1. 設置虛擬服務器
NGINX配置文件必須至少包含一個服務器指令來定義虛擬服務器。
當NGINX處理請求時,它首先選擇提供請求的虛擬服務器。
虛擬服務器由http上下文中的服務器指令定義,例如:
~~~
http {
server {
# Server configuration
}
}
~~~
可以將多個server指令添加到http上下文中以定義多個虛擬服務器。
server配置塊通常包括一個listen指令,用于指定服務器偵聽請求的IP地址和端口(或Unix域套接字和路徑)。IPv4和IPv6地址均被接受; 下面的示例顯示了監聽IP地址127.0.0.1和端口8080的服務器的配置:
~~~
server {
listen 127.0.0.1:8080;
# The rest of server configuration
}
~~~
如果省略端口,則使用標準端口。 同樣地,如果省略一個地址,服務器將偵聽所有地址。
如果沒有包含listen指令,則“標準”端口為`80/tcp`,“default”端口為`8000/tcp`,具體取決于超級用戶權限。
如果有多個服務器與請求的IP地址和端口相匹配,則NGINX將根據服務器塊中的server_name指令測試請求的主機頭域。 server_name的參數可以是完整(精確)名稱,通配符或正則表達式。 通配符是一個字符串,其開頭,結尾或兩者都包含星號`(*);` 星號匹配任何字符序列。 NGINX將Perl語法用于正則表達式; 在它們之前使用波浪號(?)。
此示例說明了一個確切的名稱。
~~~
server {
listen 80;
server_name example.org www.example.org;
...
}
~~~
如果匹配主機頭幾個名稱,則NGINX通過按以下順序搜索名稱并使用其找到的第一個匹配來選擇一個:
* 確切的名字(完整準確的名稱)
* 以星號開頭的最長通配符,例如:*.example.org
* 以星號結尾的最長通配符,如:mail.*
* 第一個匹配正則表達式(按照出現在配置文件中的順序)
如果主機頭字段與服務器名稱不匹配,則NGINX會將請求路由到請求到達端口的默認服務器。 默認服務器是nginx.conf文件中列出的第一個服務器,除非您將listen_server參數包含在listen指令中以明確指定服務器為默認值。
~~~
server {
listen 80 default_server;
...
}
~~~
一個完整的Nginx虛擬機配置示例,這里我們演示配置兩個虛擬機,對應域名分別為:`vhost1.com` 和` vhost2.com`,vhost1.com網站的主目錄在`/data/www/vhost1`,vhost2.com網站的主目錄在`/data/www/vhost2`:
~~~
server {
listen 80;
server_name vhost1.com www.vhost1.com;
index index.html index.html;
root /data/www/vhost1;
access_log /var/log/vhost1.com.log;
}
server {
listen 80;
server_name vhost2.com www.vhost2.com;
index index.html index.html;
root /data/www/vhost2;
access_log /var/log/vhost2.com.log;
}
~~~
#### 4. 返回特定狀態碼
一些網站URI需要立即返回具有特定錯誤或重定向代碼的響應,例如當頁面被暫時移動或永久移動時。 最簡單的方法是使用return指令。 例如返回未找到的404狀態碼:
~~~
location /wrong/url {
return 404;
}
~~~
返回的第一個參數是響應代碼。可選的第二個參數可以是重定向的URL(代碼301,302,303和307)或在響應體中返回文本。 例如:
~~~
location /permanently/moved/url {
return 301 http://www.example.com/moved/here;
}
~~~
返回指令可以包含在 location 和 server 上下文中。
使用error_page指令,您可以配置NGINX返回自定義頁面以及錯誤代碼,替換響應中的其他錯誤代碼,或將瀏覽器重定向到其他URI。 在以下示例中,error_page指令指定要返回404頁面錯誤代碼的頁面(/404.html)。
~~~
error_page 404 /404.html;
~~~
請注意,此偽指令并不立即返回該錯誤(返回指令執行該操作),而僅僅是指定發生時如何處理錯誤。 錯誤代碼可以來自代理服務器,或者在NGINX處理期間發生(例如,當NGINX找不到客戶端請求的文件時,顯示404對應的結果)。
在以下示例中,當NGINX找不到頁面時,它會將代碼301替換為代碼404,并將客戶端重定向到`http:/example.com/new/path.html`。 當客戶端仍嘗試訪問其舊URI的頁面時,此配置非常有用。
301代碼通知瀏覽器頁面已經永久移動,并且需要在返回時自動替換舊地址。
~~~
location /old/path.html {
error_page 404 =301 http:/example.com/new/path.html;
}
~~~
* * * * *
https://www.yiibai.com/nginx/nginx-web-server.html
- 目錄
- W3School
- 工具
- 手冊
- 實驗
- 慕課
- Linux軟件安裝管理
- RPM包安裝
- yum安裝
- Linux系統管理
- ps_mem
- uname
- CentOS版本
- Linux服務管理
- Linux權限管理
- Linux 權限控制的基本原理
- Linux網絡管理
- Linux計劃任務
- Crontab
- 任務啟停
- 綜合用例
- 間隔任務
- 一次任務
- 跨天任務
- 輸出重定向
- Crontab任務權限
- 多任務
- 表達式
- 視頻教程
- 不知疲倦的時間表
- 發送郵件
- nginx
- nginx入門到實踐
- Nginx配置Web服務器
- 查看進程
- 配置步驟
- nginx升級
- 腳本升級
- systemctl 命令完全指南
- Linux 軟件安裝目錄
- 查看文件安裝路徑
- 書籍
- 《Linux Shell腳本攻略》
- 《循序漸進Linux》
- 課程
- Linux典型應用
- 網址
- 通信
- MySQL開啟遠程連接
- 防火墻
- 安全組規則
- Mailx
- 介紹
- 安裝
- 配置
- 發送郵件
- 163_email
- 安全
- Linux中root賬號和普通賬號有什么區別,root賬號為什么不能刪除?
- chmod改變文件權限
- SELinux入門