nginx首先決定要用配置文件里的哪個(gè)server{}塊來處理,假設(shè)有下面的server{}配置
server { listen 80; server_name aaa; ... } server { listen 80; server_name bbb; ... }
nginx會根據(jù)過來的http請求頭里的Host字段里的值,來判斷使用哪個(gè)server{}。
如果請求頭里沒有Host字段,或者Host字段里的值,和Nginx配置文件里的server{}里的{server_name}都不匹配,則使用第一個(gè)server{},來處理這個(gè)請求。
如果請求頭里的Host字段里的值和Nginx配置文件里的某個(gè)server{}里的{server_name},匹配上了,則使用這個(gè)server{},來處理這個(gè)請求。
可以使用curl工具來方便的做實(shí)驗(yàn),curl可以設(shè)置http請求的請求頭,所以可以任意設(shè)置Host字段,用【-H】來設(shè)置。下面的10.210.65.73是安裝了nginx的機(jī)器的IP地址。
所以用下面的命令,發(fā)送了http請求后,nginx就會使用server{server_name aaa}來處理這個(gè)請求。
curl.exe -H "Host: aaa" 10.210.65.73
非常重要的結(jié)論:server_name對應(yīng)的是http請求頭里的Host字段的值,有了上面的理論支撐,就可以很容易的設(shè)置反向代理和負(fù)載均衡:
當(dāng)過來的http請求頭里的Host字段為aaa時(shí),storage.test來處理。
當(dāng)過來的http請求頭里的Host字段為bbb時(shí),tracker.test來處理。
#負(fù)載均衡配置,IP為129的機(jī)器配置高,所以給他的數(shù)字的27,就是讓它多處理 upstream storage.test { server 10.210.65.129:80 weight=27; server 10.210.65.130:80 weight=1; } #負(fù)載均衡配置 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:://后面的內(nèi)容是自己定義,對應(yīng)上面upstream的名字 proxy_pass http://storage.test; } } #文件服務(wù)器tracker server { listen 80; server_name bbb; location / { #http:://后面的內(nèi)容是自己定義的,對應(yīng)上面upstream的名字 proxy_pass http://tracker.test; } }
server{}里的listen監(jiān)聽的是誰的端口?
監(jiān)聽的是:發(fā)送過來http請求的進(jìn)程(大部分是瀏覽器)的端口(如果是http請求,則為端口為80),不是nginx服務(wù)器自己進(jìn)程的端口。
nginx根據(jù)http請求頭的Host字段里的值,和發(fā)送過來http請求的進(jìn)程(大部分是瀏覽器)的端口,來決定使用哪個(gè)server{}來處理http請求。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:開封 鄭州 晉城 石嘴山 拉薩 汕頭 三明 玉林
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《nginx處理http請求實(shí)現(xiàn)過程解析》,本文關(guān)鍵詞 nginx,處理,http,請求,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。