新聞中心
Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理web服務(wù)器,Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服 務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)武威,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
一、基于名稱的虛擬服務(wù)器
nginx首先確定哪個(gè)服務(wù)器應(yīng)處理該請(qǐng)求。讓我們從一個(gè)簡單的配置開始,其中所有三個(gè)虛擬服務(wù)器都在端口*:80上偵聽:
server {
listen 80;
server_name example.org www.example.org;
...
}
server {
listen 80;
server_name example.net www.example.net;
...
}
server {
listen 80;
server_name example.com www.example.com;
...
}
在此配置中,nginx僅測試請(qǐng)求的header字段“host”以確定應(yīng)將請(qǐng)求路由到哪個(gè)服務(wù)器。如果其值與任何服務(wù)器名稱都不匹配,或者請(qǐng)求根本不包含此header字段,則nginx會(huì)將請(qǐng)求路由到該端口的默認(rèn)服務(wù)器。在上面的配置中,默認(rèn)服務(wù)器是第一個(gè)服務(wù)器-這是nginx的標(biāo)準(zhǔn)默認(rèn)行為。還可以使用listen指令中的default_server參數(shù)來顯式設(shè)置哪個(gè)服務(wù)器應(yīng)為默認(rèn)服務(wù)器:
server {
listen 80 default_server;
server_name example.net www.example.net;
...
}
自0.8.21版以后的版本,default_server參數(shù)已可用。在早期版本中,應(yīng)改用默認(rèn)參數(shù)。
請(qǐng)注意,默認(rèn)服務(wù)器是偵聽端口的屬性,而不是服務(wù)器名稱的屬性。稍后再詳細(xì)介紹。
二、如何阻止使用未定義的服務(wù)器名稱的http請(qǐng)求
如果不允許不帶“主機(jī)”header字段的請(qǐng)求,則可以定義僅丟棄請(qǐng)求的服務(wù)器:
server {
listen 80
server_name ””;
return 444;
}
在這里,服務(wù)器名稱設(shè)置為空字符串,該字符串將與沒有“ Host”header字段的請(qǐng)求進(jìn)行匹配,并返回特殊的nginx的非標(biāo)準(zhǔn)代碼444,以關(guān)閉連接。
從版本0.8.48開始,這是服務(wù)器名稱的默認(rèn)設(shè)置,因此可以省略server_name“”。在早期版本中,計(jì)算機(jī)的主機(jī)名用作默認(rèn)服務(wù)器名。
三、基于名稱和IP地址混合的虛擬服務(wù)器
讓我們看一個(gè)更復(fù)雜的配置,其中一些虛擬服務(wù)器偵聽不同的地址:
server {
listen 192.168.1.1:80;
server_name example.org www.example.org;
...
}
server {
listen 192.168.1.1:80;
server_name example.net www.example.net;
...
}
server {
listen 192.168.1.2:80;
server_name example.com www.example.com;
...
}
在這種配置中,nginx首先根據(jù)服務(wù)器塊的偵聽指令測試請(qǐng)求的IP地址和端口。然后,它根據(jù)與IP地址和端口匹配的服務(wù)器塊的server_name條目測試請(qǐng)求的“主機(jī)”header字段。如果找不到服務(wù)器名稱,則默認(rèn)服務(wù)器將處理該請(qǐng)求。例如,在192.168.1.1:80端口上收到的對(duì)www.example.com的請(qǐng)求將由192.168.1.1:80端口的默認(rèn)服務(wù)器(即第一臺(tái)服務(wù)器)處理,因?yàn)闆]有www.example.com為此端口定義。
如前所述,默認(rèn)服務(wù)器是偵聽端口的屬性,并且可以為不同的端口定義不同的默認(rèn)服務(wù)器:
server {
listen 192.168.1.1:80;
server_name example.org www.example.org;
...
}
server {
listen 192.168.1.1:80 default_server;
server_name example.net www.example.net;
...
}
server {
listen 192.168.1.2:80 default_server;
server_name example.com www.example.com;
...
}
四, 一個(gè)簡單的PHP站點(diǎn)配置
現(xiàn)在,讓我們看看nginx如何選擇一個(gè)位置來處理典型的簡單PHP網(wǎng)站的請(qǐng)求:
server {
listen 80
server_name example.org www.example.org;
root /data/www;
location / {
index index.html index.php;
}
location ~* \。(gif | jpg | png)$ {
expires 30d;
}
location ~\ .php $ {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME
$ document_root $ fastcgi_script_name;
include fastcgi_params;
}
}
無論列出的順序如何,nginx首先搜索文字字符串給定的最特定的前綴位置。在上面的配置中,唯一的前綴位置是“/”,并且由于它匹配任何請(qǐng)求,因此將被用作最后的手段。然后,nginx按照配置文件中列出的順序檢查由正則表達(dá)式指定的位置。第一個(gè)匹配的表達(dá)式將停止搜索,nginx將使用此位置。如果沒有正則表達(dá)式與請(qǐng)求匹配,則nginx使用較早發(fā)現(xiàn)的最特定的前綴位置。
請(qǐng)注意,所有類型的位置僅測試沒有參數(shù)的請(qǐng)求行的URI部分。這樣做是因?yàn)椴樵冏址械膮?shù)可以通過幾種方式給出,例如:
/index.php?user=john&page=1
/index.php?page=1&user=john
此外,任何人都可以在查詢字符串中請(qǐng)求任何內(nèi)容:
/index.php?page=1&something+else&user=john
現(xiàn)在,讓我們看一下在以上配置中如何處理請(qǐng)求:
請(qǐng)求“/logo.gif”, 首先與前綴位置“/”匹配,然后與正則表達(dá)式“.(gif | jpg | png)$”匹配,因此由后一個(gè)位置處理。使用指令“root /data/www”將請(qǐng)求映射到文件/data/www/logo.gif,然后將文件發(fā)送給客戶端。
請(qǐng)求“/index.php”, 也首先與前綴位置“/”匹配,然后與正則表達(dá)式“.(php)匹配。因此,它由后一個(gè)位置處理,并將請(qǐng)求傳遞到在:上偵聽的服務(wù)器。指令將參數(shù)設(shè)置為,然后服務(wù)器執(zhí)行該文件。變量document_root等于root指令的值,變量$fastcgi_script_name等于請(qǐng)求URI,即“/index.php”。
請(qǐng)求“/about.html”僅與前綴位置“/”匹配,因此在該位置進(jìn)行處理。使用指令“root /data/www”將請(qǐng)求映射到文件/data/www/about.html,然后將文件發(fā)送給客戶端。
處理請(qǐng)求“/”更為復(fù)雜。它僅與前綴位置“/”匹配,因此由該位置處理。然后,index指令根據(jù)其參數(shù)和“root /data/www”指令對(duì)索引文件的存在進(jìn)行測試。如果文件/data/www/index.html不存在,文件/data/www/index.php存在,則該指令將內(nèi)部重定向到“/index.php”,并且nginx再次搜索位置如果請(qǐng)求是由客戶端發(fā)送的。如前所述,重定向的請(qǐng)求最終將由FastCGI服務(wù)器處理。
網(wǎng)頁標(biāo)題:Ngnix處理http請(qǐng)求具體方法
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/djcisdg.html


咨詢
建站咨詢
