Nginx如何處理一個請求

  看了下nginx的官方文檔,其中nginx如何處理一個請求講解的很好,如今貼出來分享下。Nginx首先選定由哪個虛擬主機來處理請求。讓咱們從一個簡單的配置(其中所有3個虛擬主機都在端口*:80上監聽)開始:nginx

 1 server {
 2     listen      80;
 3     server_name example.org www.example.org;
 4     ...
 5 }
 6 
 7 server {
 8     listen      80;
 9     server_name example.net www.example.net;
10     ...
11 }
12 
13 server {
14     listen      80;
15     server_name example.com www.example.com;
16     ...
17 }

  在這個配置中,nginx僅僅檢查請求的「Host」頭以決定該請求應由哪一個虛擬主機來處理。若是Host頭沒有匹配任意一個虛擬主機,或者請求中根本沒有包含Host頭,那nginx會將請求分發到定義在此端口上的默認虛擬主機。在以上配置中,第一個被列出的虛擬主機即nginx的默認虛擬主機——這是nginx的默認行爲。並且,能夠顯式地設置某個主機爲默認虛擬主機,即在"listen"指令中設置"default_server"參數:服務器

1 server {
2     listen      80 default_server;
3     server_name example.net www.example.net;
4     ...
5 }

  下面讓咱們來看一個複雜點的配置,在這個配置裏,有幾個虛擬主機在不一樣的地址上監聽:測試

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首先測試請求的IP地址和端口是否匹配某個server配置塊中的listen指令配置。接着nginx繼續測試請求的Host頭是否匹配這個server塊中的某個server_name的值。若是主機名沒有找到,nginx將把這個請求交給默認虛擬主機處理。例如,一個從192.168.1.1:80端口收到的訪問www.example.com的請求將被監聽192.168.1.1:80端口的默認虛擬主機處理,本例中就是第一個服務器,由於這個端口上沒有定義名爲www.example.com的虛擬主機。spa

相關文章
相關標籤/搜索