nginx 中通過server_name listen的方式配置多個服務器
現在假設有三台主機,他們的ip分別為:
A: 192.168.1.167
B: 192.168.1.168
C: 192.168.1.169
nginx作為代理服務器部署在主機 A 上面,B 和 C 作為兩台應用服務器。現在想實現通過A訪問B和C,有以下兩種方式:
一、通過不同的listen實現對B和C的訪問,實現方式如下:在nginx.conf中添加兩個server
server {
listen 8081;
server_name test1;
location / {
proxy_pass http://192.168.1.168:9093;
}
}
server {
listen 8082;
server_name test2;
location / {
proxy_pass http://192.168.1.169:9093;
}
}
注意:1、在以上配置中,server_name可以任意取名
2、主機B的訪問方式通過A監聽端口8081來代理,訪問方式:http://192.168.1.167:8081
3、主機C的訪問方式通過A監聽端口8082來代理,訪問方式:http://192.168.1.167:8082
二、通過相同的listen,不同的server_name實現對B和C的訪問,即通過不同的域名方式訪問B和C,實現方式如下:
server {
listen 8080;
server_name www.test1.com;
location / {
proxy_pass http://192.168.1.168:9093;
}
}
server {
listen 8080;
server_name www.test2.com;
location / {
proxy_pass http://192.168.1.169:9093;
}
}
注意:1、在以上配置中,server_name表示B和C的域名
2、主機B和C的訪問方式都通過A監聽端口8080來代理
3、由於是測試,需要在測試端修改hosts文件,即在hosts文件中添加以下內容
192.168.1.168 www.test1.com
192.168.1.169 www.test2.com
4、訪問方式:在修改了hosts文件的電腦上按以下方式分別訪問B和C:
http://www.test1.com:8080
http://www.test2.com:8080
其中:
linux下hosts所在路徑:/etc/hosts
windows下hosts所在路徑:C:\Windows\System32\drivers\etc\hosts
server name 為虛擬服務器的識別路徑。因此對於相同的listen不同的域名會通過請求頭中的HOST字段,匹配到特定的server塊,轉發到對應的應用服務器中去。
基於域名的虛擬主機(name based virtual host),配置的方法就是多個虛擬主機綁定同一個端口,通過server_name區分。
基於的理論基礎就是http協議中會帶一個HOST頭,web server通過這個頭判斷具體交給哪個虛擬主機響應。如果沒有一個匹配,那么通常哪個在前哪個優先響應,這個叫默認虛擬主機,apache有個_default_屬性可以強行指定某一個虛擬主機為默認虛擬主機。如下圖
hosts文件指定IP與域名的對應關系(如:192.168.1.169 www.test2.com),對域名的訪問會映射成對應的IP。這個ip就是nginx的公網IP 。然后server name 為虛擬服務器的識別路徑。因此不同的域名會轉發到對應的應用服務器中去。
接下來有時間會分析下 upstream、conf.d
參考:https://blog.csdn.net/sollor525/article/details/81360411
https://blog.csdn.net/cheng_kohui/article/details/82930464
https://segmentfault.com/q/1010000011245338/a-1020000011245502
http://www.nginx.cn/doc/standard/httpcore.html
————————————————
版權聲明:本文為CSDN博主「thlzjfefe」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/thlzjfefe/article/details/84489311