nginx是怎麼處理http請求的

nginx是怎麼處理http請求的html

參考:How nginx processes a requestnginx

nginx first decides which server should process the request. Let’s start with a simple configuration where all three virtual servers listen on port *:80:c++

nginx首先決定要用配置文件裏的哪一個server{}塊來處理,假設有下面的server{}配置瀏覽器

server {
    listen      80;
    server_name aaa;
    ...
}

server {
    listen      80;
    server_name bbb;
    ...
}

<font color=red>nginx會根據過來的http請求頭裏的Host字段裏的值,來判斷使用哪一個server{}。</font>

  • 若是請求頭裏沒有Host字段,或者Host字段裏的值,和Nginx配置文件裏的server{}裏的{server_name}都不匹配,則使用第一個server{},來處理這個請求。
  • 若是請求頭裏的Host字段裏的值和Nginx配置文件裏的某個server{}裏的{server_name},匹配上了,則使用這個server{},來處理這個請求。

可使用curl工具來方便的作實驗,curl能夠設置http請求的請求頭,因此能夠任意設置Host字段,用【-H】來設置。下面的10.210.65.73是安裝了nginx的機器的IP地址。服務器

因此用下面的命令,發送了http請求後,nginx就會使用server{server_name aaa}來處理這個請求。微信

curl.exe -H "Host: aaa" 10.210.65.73

<font color=red>很是重要的結論:server_name對應的是http請求頭裏的Host字段的值</font>

有了上面的理論支撐,就能夠很容易的設置反向代理和負載均衡

  • 當過來的http請求頭裏的Host字段爲aaa時,storage.test來處理。
  • 當過來的http請求頭裏的Host字段爲bbb時,tracker.test來處理。
#負載均衡配置,IP爲129的機器配置高,因此給他的數字的27,就是讓它多處理
   upstream storage.test {
     server 10.210.65.129:80 weight=27;
     server 10.210.65.130:80 weight=1;
   }

   #負載均衡配置
   upstream tracker.test {
     server 10.210.65.52:80 weight=7;
     server 10.210.65.53:80 weight=2;
   }

   #文件的存儲
   server {
       listen       80;
       server_name  aaa;
       location / {
            #http:://後面的內容是本身定義,對應上面upstream的名字
            proxy_pass  http://storage.test;
       }
   }

   #文件服務器tracker
   server {
       listen       80;
       server_name  bbb;

       location / {
            #http:://後面的內容是本身定義的,對應上面upstream的名字
            proxy_pass http://tracker.test;
       }

   }

##<font color=red>server{}裏的listen監聽的是誰的端口? 監聽的是:發送過來http請求的進程(大部分是瀏覽器)的端口(若是是http請求,則爲端口爲80),不是nginx服務器本身進程的端口。 nginx根據http請求頭的Host字段裏的值,和發送過來http請求的進程(大部分是瀏覽器)的端口,來決定使用哪一個server{}來處理http請求。 </font>負載均衡

<font color="green">curl

c/c++ 學習互助QQ羣:877684253

本人微信:xiaoshitou5854

</font>ide

相關文章
相關標籤/搜索