iT邦幫忙

0

如何設定Nginx 對於不同的hostname 對應到不同的主機

小弟有個環境如下圖架構,想為設計部門每個使用者建立專屬的環境,請教前輩們nginx是否可以做到.小弟環境是1.15.2

Console01-04 全部指向同一台nginx server 當使用者連線不同的dns name 則轉向不同IP的環境.

https://ithelp.ithome.com.tw/upload/images/20180806/200723061QuMAj7AUR.png

2 個回答

0
froce
iT邦高手 1 級 ‧ 2018-08-06 15:40:31

參閱這個:
https://shazi.info/centos-6-%E5%BB%BA%E7%AB%8B-nginx-reverse-proxy/

nginx的config改成:

server{
    listen       80;
    #Proxy的位置,提供給使用者連線
    server_name 「Domain Name 01」;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        
        #後端的Web伺服器,以Nginx官網為例
        proxy_pass 「server 01」;
 
        #定義header記錄使用者IP
        proxy_set_header X-Real-IP $remote_addr;
        
        #讓後端的Web伺服器可以取得使用者真實IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
        #把 Protocol header 也往後送
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_max_temp_file_size 0;
    }
}

這樣應該可以。

看更多先前的回應...收起先前的回應...

小弟有點困惑,因為client端並非走http protocol連線,而是使用putty或是遠端桌面連線,後端其實也不是web server我猜可能不會有這類的header.
以下是我的設定,我的結果是不論client連線哪個hostname 全都會連線到defalut,也就是console01的環境
如果把default敘述拿掉則無法連線,error log為"*1 no host in upstream"

stream {

map $ssl_preread_server_name $name {
    console01 console01;
    console02 console02;
	console03 console03;
	console04 console04;
    default   console01;

}     
     
upstream console01 {
    server 192.168.201.100:22;
}        

upstream console02 {
    server 192.168.201.101:22;
}

upstream console03 { 
    server 192.168.201.102:3389;
}

upstream console04 {
    server 192.168.201.103:3389;
}

server {
    listen my_externalIP:60003;
    proxy_pass $name;

}

}

echochio iT邦研究生 5 級 ‧ 2018-08-06 16:20:23 檢舉

upstream 沒錯 , 也可導 UDP 呦 !!!
https://www.echochio.nctu.me/2016/11/nginx_proxy_keepalived/

我用這個還做過 AD 的 HA Proxy !!!

感謝回覆,參考您提到的範例看似load balance的設定,似乎沒有提到有關於hostname名稱對應的敘述.

echochio iT邦研究生 5 級 ‧ 2018-08-06 17:45:53 檢舉

明天我貼上改好的完全設定給你 ......
當然你的 nginx 要有支援 upstream stream

非常感謝您!

0
echochio
iT邦研究生 5 級 ‧ 2018-08-07 10:19:37
$cat /etc/nginx/nginx.conf
...
stream {
    upstream pod3{
        server 10.1.5.3:3306;
    }
    upstream pod4{
        server 10.1.5.4:3306;
    }

    map $server_addr $x {
        192.168.1.238 pod3;
        192.168.1.239 pod4;
    }
    server {
        listen 3306;
        proxy_pass $x;
    }
}

之前網路上 ... 找到之前設定
對 不同 mysql 給與不同的連結 ....
好像是前端那台 Server 要帶多 IP ...
設多 domain 好像有問題 ...忘了

我沒有機器試了 ...

感謝您我再試試看

我要發表回答

立即登入回答