詳解Nginx如何配置Web服務(wù)器的示例代碼
概述
今天主要分享怎么將NGINX配置作為Web服務(wù)器,并包括以下部分:
- 設(shè)置虛擬服務(wù)器
- 配置位置
- 使用變量
- 返回特定狀態(tài)碼
- 重寫(xiě)HTTP響應(yīng)
在高層次上,將NGINX配置作為Web服務(wù)器有一些問(wèn)題需要了解,定義它處理哪些URL以及如何處理這些URL上的資源的HTTP請(qǐng)求。 在較低層次上,配置定義了一組控制對(duì)特定域或IP地址的請(qǐng)求的處理的虛擬服務(wù)器。

用于HTTP流量的每個(gè)虛擬服務(wù)器定義了稱為位置的特殊配置實(shí)例,它們控制特定URI集合的處理。 每個(gè)位置定義了自己的映射到此位置的請(qǐng)求發(fā)生的情況。 NGINX可以完全控制這個(gè)過(guò)程。 每個(gè)位置都可以代理請(qǐng)求或返回一個(gè)文件。 此外,可以修改URI,以便將請(qǐng)求重定向到另一個(gè)位置或虛擬服務(wù)器。 此外,可以返回特定的錯(cuò)誤代碼,也可以配置特定的頁(yè)面以對(duì)應(yīng)于每個(gè)錯(cuò)誤代碼。
1. 設(shè)置虛擬服務(wù)器
NGINX配置文件必須至少包含一個(gè)服務(wù)器指令來(lái)定義虛擬服務(wù)器。 當(dāng)NGINX處理請(qǐng)求時(shí),它首先選擇提供請(qǐng)求的虛擬服務(wù)器。
虛擬服務(wù)器由http上下文中的服務(wù)器指令定義,例如:
http {
server {
# Server configuration
}
}
可以將多個(gè)server指令添加到http上下文中以定義多個(gè)虛擬服務(wù)器。
server配置塊通常包括一個(gè)listen指令,用于指定服務(wù)器偵聽(tīng)請(qǐng)求的IP地址和端口(或Unix域套接字和路徑)。IPv4和IPv6地址均被接受; 將方括號(hào)(。
下面的示例顯示了監(jiān)聽(tīng)I(yíng)P地址127.0.0.1和端口8080的服務(wù)器的配置:
server {
listen 127.0.0.1:8080;
# The rest of server configuration
}
如果省略端口,則使用標(biāo)準(zhǔn)端口。 同樣地,如果省略一個(gè)地址,服務(wù)器將偵聽(tīng)所有地址。 如果沒(méi)有包含listen指令,則“標(biāo)準(zhǔn)”端口為80/tcp,“default”端口為8000/tcp,具體取決于超級(jí)用戶權(quán)限。
如果有多個(gè)服務(wù)器與請(qǐng)求的IP地址和端口相匹配,則NGINX將根據(jù)服務(wù)器塊中的server_name指令測(cè)試請(qǐng)求的主機(jī)頭域。 server_name的參數(shù)可以是完整(精確)名稱,通配符或正則表達(dá)式。 通配符是一個(gè)字符串,其開(kāi)頭,結(jié)尾或兩者都包含星號(hào)(*); 星號(hào)匹配任何字符序列。 NGINX將Perl語(yǔ)法用于正則表達(dá)式; 在它們之前使用波浪號(hào)()。 此示例說(shuō)明了一個(gè)確切的名稱。
server {
listen 80;
server_name example.org www.example.org;
...
}
2. 配置位置
NGINX可以根據(jù)請(qǐng)求URI向不同的代理發(fā)送流量或提供不同的文件。 這些塊是使用放置在server指令中的location指令來(lái)定義的。
例如,您可以定義三個(gè)location塊,以指示虛擬服務(wù)器向一個(gè)代理服務(wù)器發(fā)送一些請(qǐng)求,將其他請(qǐng)求發(fā)送到不同的代理服務(wù)器,并通過(guò)從本地文件系統(tǒng)傳遞文件來(lái)提供其余請(qǐng)求。
NGINX測(cè)試根據(jù)所有l(wèi)ocation指令的參數(shù)請(qǐng)求URI,并應(yīng)用匹配location中定義的指令。 在每個(gè)location塊內(nèi),通??赡?除了一些例外)放置更多的location指令以進(jìn)一步細(xì)化特定組請(qǐng)求的處理。
注意:在本教程文章中,單詞location是指單個(gè)location上下文。
location指令有兩種類型的參數(shù):前綴字符串(路徑名)和正則表達(dá)式。 對(duì)于要匹配前綴字符串的請(qǐng)求URI,必須以前綴字符串開(kāi)頭。
具有pathname參數(shù)的以下示例位置匹配以/some/path/開(kāi)頭的請(qǐng)求URI,例如/some/path/document.html,它不匹配/my-site/some/path,因?yàn)?some/path不在該URI的開(kāi)頭出現(xiàn)。
location /some/path/ {
...
}
正則表達(dá)式之前是區(qū)分大小寫(xiě)匹配的波形符號(hào)(~),或者不區(qū)分大小寫(xiě)匹配的波形符號(hào)(~*)。 以下示例將包含字符串.html或.html的URI與任何位置相匹配。
location ~ \.html? {
...
}
要找到最符合URI的位置,NGINX首先將URI與前綴字符串的位置進(jìn)行比較。然后用正則表達(dá)式搜索位置。
location上下文可以包含定義如何解析請(qǐng)求的指令 - 提供靜態(tài)文件或?qū)⒄?qǐng)求傳遞給代理的服務(wù)器。 在以下示例中,匹配第一個(gè)location上下文的請(qǐng)求將從/data/images目錄中提供文件,并將匹配第二個(gè)位置的請(qǐng)求傳遞給承載 www.example.com 域內(nèi)容的代理服務(wù)器。
server {
location /images/ {
root /data;
}
location / {
proxy_pass http://www.example.com;
}
}
root指令指定要在其中搜索要提供的靜態(tài)文件的文件系統(tǒng)路徑。 與該位置相關(guān)聯(lián)的請(qǐng)求URI將附加到路徑,以獲取要提供的靜態(tài)文件的全名。 在上面的示例中,要響應(yīng)/images/logo.png的請(qǐng)求,NGINX提供服務(wù)器本地實(shí)際對(duì)應(yīng)文件是:/data/images/logo.png。
proxy_pass指令將請(qǐng)求傳遞給使用配置的URL訪問(wèn)代理服務(wù)器。然后將代理服務(wù)器的響應(yīng)傳回客戶端。在上面的示例中,所有不以/images/開(kāi)頭的URI的請(qǐng)求都將被傳遞給代理的服務(wù)器(也就是:www.example.com)。
3. 使用變量
可以使用配置文件中的變量,使NGINX進(jìn)程的請(qǐng)求根據(jù)定義的情況而有所不同。 變量是在運(yùn)行時(shí)計(jì)算的命名值,用作指令的參數(shù)。 一個(gè)變量由它的名字開(kāi)頭的$(美元)符號(hào)表示。 變量根據(jù)NGINX的狀態(tài)定義信息,例如正在處理的請(qǐng)求的屬性。
有許多預(yù)定義的變量,如核心HTTP變量,您可以使用set,map和geo指令定義自定義變量。 大多數(shù)變量在運(yùn)行時(shí)計(jì)算的,并包含與特定請(qǐng)求相關(guān)的信息。 例如,$remote_addr包含客戶端IP地址,$uri保存當(dāng)前的URI值。
4. 返回特定狀態(tài)碼
一些網(wǎng)站URI需要立即返回具有特定錯(cuò)誤或重定向代碼的響應(yīng),例如當(dāng)頁(yè)面被暫時(shí)移動(dòng)或永久移動(dòng)時(shí)。 最簡(jiǎn)單的方法是使用return指令。 例如返回未找到的404狀態(tài)碼:
location /wrong/url {
return 404;
}
返回的第一個(gè)參數(shù)是響應(yīng)代碼。可選的第二個(gè)參數(shù)可以是重定向的URL(代碼301,302,303和307)或在響應(yīng)體中返回文本。 例如:
location /permanently/moved/url {
return 301 http://www.example.com/moved/here;
}
返回指令可以包含在 location 和 server 上下文中。
5. 重寫(xiě)HTTP響應(yīng)
有時(shí)需要重寫(xiě)或更改HTTP響應(yīng)中的內(nèi)容,將一個(gè)字符串替換為另一個(gè)字符串。 可以使用sub_filter指令來(lái)定義要應(yīng)用的重寫(xiě)。 該指令支持變量和替代鏈,使更復(fù)雜的更改成為可能。
例如,可以更改引用除代理服務(wù)器之外的絕對(duì)鏈接:
location / {
sub_filter /blog/ /blog-staging/;
sub_filter_once off;
}
另一個(gè)示例將方法從http://更改為http://,并從請(qǐng)求頭域替換本地主機(jī)地址到主機(jī)名。 sub_filter_once指令告訴NGINX在一個(gè)位置(location)內(nèi)連續(xù)應(yīng)用sub_filter偽指令:
location / {
sub_filter 'href="http://$host/';
sub_filter 'img src="http://127.0.0.1:8080/' 'img src="http://$host/';
sub_filter_once on;
}
請(qǐng)注意,如果發(fā)生另一個(gè)sub_filter匹配,則使用sub_filter修改的響應(yīng)部分將不再被替換。
到此這篇關(guān)于詳解Nginx如何配置Web服務(wù)器的示例代碼的文章就介紹到這了,更多相關(guān)Nginx 配置Web服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
filebeat收集多個(gè)域名網(wǎng)站日志并存儲(chǔ)到不同es索引庫(kù)過(guò)程
這篇文章主要為大家介紹了filebeat收集多個(gè)域名網(wǎng)站日志并存儲(chǔ)到不同es索引庫(kù)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
詳解nginx服務(wù)器綁定域名和設(shè)置根目錄的方法
這篇文章主要介紹了詳解nginx服務(wù)器綁定域名和設(shè)置根目錄的方法,nginx服務(wù)器綁定域名以及設(shè)置根目錄非常方便,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
FastDFS+Nginx如何搭建本地服務(wù)器并實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)
FastDFS是一個(gè)開(kāi)源的輕量級(jí)分布式文件系統(tǒng),它對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪問(wèn)(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問(wèn)題,這篇文章主要介紹了FastDFS+Nginx搭建本地服務(wù)器并實(shí)現(xiàn)遠(yuǎn)程訪問(wèn),需要的朋友可以參考下2023-11-11
nginx將https協(xié)議反向代理到http協(xié)議請(qǐng)求上的實(shí)現(xiàn)
本文主要介紹了nginx將https協(xié)議反向代理到http協(xié)議請(qǐng)求上的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10
阿里云ssl證書(shū)如何通過(guò)Nginx部署到服務(wù)器
這篇文章主要介紹了阿里云ssl證書(shū)通過(guò)Nginx部署到服務(wù)器的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
Nginx服務(wù)器基礎(chǔ)的安全配置與一些安全使用提示
這篇文章主要介紹了Nginx服務(wù)器基礎(chǔ)的安全配置與一些安全使用提示,文中舉了一些典型的Nginx與PHP的環(huán)境用例,需要的朋友可以參考下2016-01-01
nginx上部署react項(xiàng)目的實(shí)例方法
今天小編就為大家分享一篇關(guān)于nginx上部署react項(xiàng)目的實(shí)例方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
nginx提示:500 Internal Server Error錯(cuò)誤的解決方法
本文章來(lái)給大家總結(jié)了大量關(guān)于導(dǎo)致nginx中提示500 Internal Server Error錯(cuò)誤的原因總結(jié)與解決方法分析有需要了解的朋友可參考參考2013-04-04

