php的server和location,3、Nginx关于server块和location块的配置
前面第2篇文章中列出了全局段、events段、http段的一些指令的意義和用法,這篇文章將介紹server段和location段的相關(guān)指令。
server段配置
listen:
listen指令有三種配置方法:
1、listen address[:port] [ default_server ]? [ ssl ];
2、listen port [ default_server ]? [ ssl ];
3、listen unix:path [ default_server ]? [ ssl ];
使用示例:
listen *:80 | *:8000; ? ###監(jiān)聽所有80和8000端口
listen 192.168.1.10;###監(jiān)聽具體IP的所有端口上的連接
listen 8000;###監(jiān)聽具體端口上的所有IP連接,等同于listen ?*:8000;
server_name:
語法:server_name ?name...;
設(shè)置虛擬主機(jī)名稱。可以設(shè)置多個name,例如:
server_name ?myserver.com www.myserver.com;
name中可以使用通配符*,但是通配符只能用在由三段字符串組成的名稱的首段或尾段,或者由兩段字符串組成的名稱的尾段。例如:
server_name ? *.myserver.com ?www.myserver.*;
name中還可以使用正則表達(dá)式,并使用波浪號“~”作為正則表達(dá)式字符串的開始標(biāo)記。例如:
server_name ? ~^www\d+\.myserver\.com$;
表示以匹配www開頭,后面緊跟一個或者多個數(shù)字,后面是myserver,并且以com結(jié)尾的name
由于server_name指令支持通配符和正則表達(dá)式兩種配置名稱的方式,因此在包含有多個虛擬主機(jī)的配置文件中,可能會出現(xiàn)一個名稱被多個虛擬主機(jī)的server_name匹配成功,那么來自這個名稱的請求到底被哪個虛擬主機(jī)處理呢?Nginx會根據(jù)以下優(yōu)先級來選擇虛擬主機(jī)響應(yīng)用戶端的請求:
1、準(zhǔn)確匹配server_name
2、通配符開開始時匹配server_name成功
3、通配符在結(jié)尾時匹配server_name成功
4、正則表達(dá)式匹配server_name成功
5、如果server_name被同一優(yōu)先級的匹配方式匹配到,則誰先匹配到誰負(fù)責(zé)響應(yīng)。
root:
語法:root ?path;
指定根目錄路徑。
示例:
location ?/data/ {
root ?/wwwroot/html;
}
當(dāng)location接收到“/data/index.html”的訪問請求時,會在/wwwroot/html/data/目錄下找到index.html來響應(yīng)用戶請求。
index:
設(shè)置默認(rèn)首頁,一般有兩個作用,一是,用戶在發(fā)出請求訪問網(wǎng)站時,請求地址可以不寫首頁名稱,二是,可以對一個請求,根據(jù)其請求的內(nèi)容而設(shè)置不用的首頁,該指令的語法結(jié)構(gòu)為:
index ?file ...;
示例:server?{
listen?80;
server_name?test;
error_log?/etc/nginx/conf.d/error.log;
root?/wwwroot/html;
index?c.html;
location?/t/?{
root?/wwwroot/html;
index?a.html;
}
}
error_page:
設(shè)置網(wǎng)站的錯誤頁面,語法為:
error_page ?code ... [=[response]]uri;
code:要處理的HTTP錯誤代碼
response:將code指定的錯誤代碼轉(zhuǎn)換為新的錯誤代碼
uri:錯誤頁面的路徑或者網(wǎng)站地址,這個uri是相對于root設(shè)置的根路徑而言的。
示例:
error_page ?404 ?/404.html;
基于IP的訪問控制:
allow? address | CIDR | unix |all;
設(shè)置允許訪問的IP范圍
deny ?address | CIDR | unix:| all;
設(shè)置拒絕訪問的IP范圍
示例:location?/t/?{
root?/data/www/vhost2/;
allow?172.16.100.120;
deny?all;
}
僅允許172.16.100.120這個IP地址訪問
基于賬戶密碼訪問Nginx服務(wù)器
auth_basic string | off;
是否啟用密碼認(rèn)證
auth_basic_user_file? file;
指定密碼認(rèn)證的配置文件路徑,只有在auth_basic啟用時有效。
示例:創(chuàng)建一個server.conf的配置文件,并設(shè)置基于賬號密碼訪問該server中配置的虛擬主機(jī)
1、先創(chuàng)建server.conf的配置文件
#cd /etc/nginx/conf.d/
#vim server.confserver?{
listen?8888;
server_name?test;
root?/wwwroot/html;
location?/t/?{
auth_basic?"Admin?Area";
auth_basic_user_file??/etc/nginx/.ngxpasswd;
}
}
2、創(chuàng)建賬號密碼文件,需要安裝httpd
#htpasswd -c -m /etc/nginx/.ngxpasswd tom
創(chuàng)建密碼文件,路徑為/etc/nginx/.ngxpasswd ?并創(chuàng)建一個tom的賬號,命令會提示輸入密碼
#htpasswd? -m /etc/nginx/.ngxpasswd jerry
再創(chuàng)建一個名為Jerry的賬號,創(chuàng)建第二個賬號時不用-c選項(xiàng)
3、測試訪問網(wǎng)站
stub_status:
通過制定的uri輸出stub_status,只能定義在server和location中。
示例:server?{
listen?8889;
server_name?test;
root?/wwwroot/html;
location?/t/?{
stub_status;
}
}
當(dāng)前活動客戶端連接數(shù)包括waiting狀態(tài)的客戶端
accepts:已接受的客戶端連接總數(shù)量
handled : 已處理的客戶端連接數(shù)量
requests: 客戶端總請求數(shù)量
reading:當(dāng)前nginx正在讀取客戶端請求報(bào)文的連接數(shù)量數(shù)量
writing:正在響應(yīng)客戶端請求報(bào)文的連接數(shù)量
waiting:等待其發(fā)出請求的空閑連接數(shù)量
location段配置:
注意,location段只能在server段中配置,前面的文章有講過。
其配置結(jié)構(gòu)為:server?{
...
location?[PATTERN]?{
...
}
location?[PATTERN]?{
...
}
}
location的語法結(jié)構(gòu)為:
location [ = | ~ | ~* | ^~ ] uri { ...}
其中uri變量是帶匹配的請求字符串,可以是不含正則表達(dá)式的字符串,如/myserver.php等。也可以是含有正則表達(dá)式的字符串,如\.php$(表示以.php結(jié)尾的URL)。不含正則表達(dá)式的uri稱為標(biāo)準(zhǔn)uri,含有正則表達(dá)式的uri稱為正則uri。
方括號中的都是可選項(xiàng),用來改變請求字符串與uri的匹配方式。在介紹這幾個標(biāo)識的含義之前,先說說Nginx服務(wù)器是如何在sever塊中所有l(wèi)ocation塊的uri和請求的字符串匹配的:
在不添加此選項(xiàng)之前,Nginx服務(wù)器首先在server塊的多個location中搜索是否有標(biāo)準(zhǔn)uri和請求的字符串匹配,如果有多個匹配,就記錄匹配度最高的一個。然后在用location塊中的正則uri和請求的字符串匹配,當(dāng)?shù)谝粋€正則uri匹配成功時,結(jié)束搜索,并使用這個location塊處理處理此請求。如果正則匹配全部失敗,則使用剛才記錄的匹配度最高的location塊來處理請求
“=”:用于標(biāo)準(zhǔn)uri前,要求請求字符串與uri嚴(yán)格匹配,如果匹配成功則立即停止向下所有并立即處理此請求。
“~”:用于表示uri包含正則表達(dá)式,并且區(qū)分大小寫
“~*”:用于表示uri包含正則表達(dá)式,并且不區(qū)分大小寫
“^~”:用于標(biāo)準(zhǔn)uri前,要求Nginx服務(wù)器找到標(biāo)識uri和請求字符串匹配度最高的location后,立即使用此location處理請求,而不再使用location塊中的正則uri和請求字符串做匹配。
匹配優(yōu)先級:精確匹配“=” > “^~” > “~”或者~*> 不帶符號的URL
location段的配置指令:
root:
指定根目錄,語法為:root ?path;
該指令也還能用于http段和server段中。
示例:
location ?/data/ {
root ?/locationtest1;
}
當(dāng)location塊接收到“/data/index.htm”的請求時,將在/locationtest1/data/目錄下找到index.htm來響應(yīng)請求。
alias:
定義路徑別名。語法:alias ?path;
注意,這里的path是修改后的根路徑,而不是相對于root 的路徑
示例:server?{
listen?80;
server_name?test;
error_log?/etc/nginx/conf.d/error.log;
root?/wwwroot/html;
index?c.html;
location?/abc/?{
alias?/wwwroot/html/data/zeng/;
}
}
當(dāng)用戶請求test/abc/index.html時,Nginx將從/wwwroot/html/data/zeng/目錄中找到index.html來響應(yīng)請求。
index:
設(shè)置默認(rèn)主頁,和在server段中的用法一樣,不再作說明。
總結(jié)
以上是生活随笔為你收集整理的php的server和location,3、Nginx关于server块和location块的配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公主连结前排坦克怎么选择
- 下一篇: 用Visual Studio .Net