1. 程式人生 > 其它 >nginx 中通過server_name listen的方式配置多個伺服器

nginx 中通過server_name listen的方式配置多個伺服器

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