一臺(tái)服務(wù)器支持多個(gè)域名和站點(diǎn)

轉(zhuǎn)載請(qǐng)注明原作者,如果覺(jué)得有用,不用請(qǐng)我喝咖啡:D

最近數(shù)次遇到這種情況:硬件資源有限,但有些開(kāi)發(fā)配置要求比較嚴(yán)苛(如在微信公眾號(hào)進(jìn)行接口配置或安全域名配置),要求80端口甚至頂級(jí)域名。但服務(wù)器的80端口早就被之前的已經(jīng)上線的應(yīng)用占掉了。

因此做了一些嘗試,最終解決了訪問(wèn)問(wèn)題。

需求

  1. 只有一臺(tái)服務(wù)器,一個(gè)IP;
  2. 服務(wù)器上有多個(gè)應(yīng)用運(yùn)行在不同的端口。例如:
  • 127.0.0.1:4000 運(yùn)行著一個(gè)node.js寫(xiě)的博客應(yīng)用
  • 127.0.0.1:3009 運(yùn)行著一個(gè)微信公眾號(hào)機(jī)器人的后臺(tái)
  1. 希望不同的域名,都解析到該IP的80端口,但是轉(zhuǎn)發(fā)到不同的端口去:
  • www.me.com 能訪問(wèn)到127.0.0.1:4000的應(yīng)用
  • 新增一個(gè)mysite.mydomain.com 能訪問(wèn)到127.0.0.1:3009的微信后臺(tái)(微信要求綁定服務(wù)器時(shí)綁定的是80端口)

思路

域名都解析到該服務(wù)器的IP下,通過(guò)Nginx區(qū)分主機(jī)頭,從而決定請(qǐng)求訪問(wèn)到哪個(gè)應(yīng)用。

相當(dāng)于門(mén)衛(wèi)將不同的來(lái)者領(lǐng)到不同的房間。

最終通過(guò)對(duì)Nginx的配置實(shí)現(xiàn)了需求。

目前用著沒(méi)啥問(wèn)題,但優(yōu)劣還待考證。

Part 1: 服務(wù)器端操作

1. 在Nginx的conf中添加upstream

指向第二個(gè)應(yīng)用的本機(jī)地址。

 upstream mysvr {
      server 127.0.0.1:3009; 
    }

附上原有的第一個(gè)應(yīng)用的upstream。

upstream hodorsvr {
      server 127.0.0.1:4000; 
    }

2. 在Nginx的conf中添加二級(jí)域名主機(jī)頭80端口的偵聽(tīng)

注意本例中,要新添加的解析二級(jí)域mysite.mydomain.com

  • 端口號(hào)為80
  • server_name 精確匹配到二級(jí)域名(本例中為mysite.mydomain.com。其他規(guī)則或www也可以,只要與域名商處解析行為一致即可)

再給conf添加如下1個(gè)server:

server {
        listen       80;
        server_name  mysite.mydomain.com;
        location / {
            proxy_pass http://mysvr;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

添加后,有2個(gè)server,一個(gè)用來(lái)匹配www.me.com,一個(gè)用來(lái)匹配mysite.mydomain.com。
附上原有的另一個(gè)server:

server {
        listen       80;
        server_name  me.com www.me.com;
        location / {
            proxy_pass http://hodorsvr;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

upstream和server都在conf中加好后,使用如下命令測(cè)試一下配置文件是否可用。以我自己的為例:

/usr/local/webserver/nginx/sbin/nginx -t

通過(guò)后,再重啟nginx。

/usr/local/webserver/nginx/sbin/nginx -s reload

先檢查一下原有的域名訪問(wèn)是否一如既往。
注意測(cè)試前可清除一下DNS緩存。
如果是Mac系統(tǒng),使用如下命令:

sudo dscacheutil -flushcache

Part 2: 域名商操作

在域名商(域名在哪家買(mǎi)的就去哪家)處,增加新域名(二級(jí)域名)的A記錄解析到該IP。

Part 3: 空間商操作

一般的服務(wù)器,解析后即可生效,不需要在空間商處做額外的動(dòng)作。

但如果域名商為西部數(shù)據(jù)且空間是國(guó)內(nèi)要備案的那種空間,則需要:

  • 為你的IP添加白名單,填寫(xiě)時(shí)要求填寫(xiě)頂級(jí)域名。即,你只是想為mysite.mydomain.com解析,但添加時(shí)要填寫(xiě)mydomain.com;
  • 去域名商那里,在你的域名mydomain.com下,不用動(dòng)www和@的A記錄,直接增加一條mysite(你的二級(jí)域名)的CNAME解析到白名單返回給你的那一串值上。

Part 4: 最后確認(rèn)

清除一下DNS緩存。
如果是Mac系統(tǒng),使用如下命令:

sudo dscacheutil -flushcache

然后使用nslookup看一下你的兩個(gè)域名是否已經(jīng)指向了你這臺(tái)服務(wù)器的IP。

之后就通過(guò)不同域名訪問(wèn),看看是否導(dǎo)向了不同的應(yīng)用即可。

~ END ~

參考

受益于如下這些文章:

Nginx實(shí)現(xiàn)多個(gè)站點(diǎn)使用一個(gè)端口(配置Nginx的虛擬主機(jī))

nginx 一個(gè)端口多域名服務(wù)方案

帖子: 二級(jí)域名如何指向同一IP地址的不同端口

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,933評(píng)論 18 139
  • 第一章 Nginx簡(jiǎn)介 Nginx是什么 沒(méi)有聽(tīng)過(guò)Nginx?那么一定聽(tīng)過(guò)它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,795評(píng)論 24 1,002
  • DNS(Domain Name System,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能...
    一直在努力hard閱讀 4,699評(píng)論 3 19
  • 名詞延伸 通俗的說(shuō),域名就相當(dāng)于一個(gè)家庭的門(mén)牌號(hào)碼,別人通過(guò)這個(gè)號(hào)碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,640評(píng)論 2 56
  • Page 1:nginx 服務(wù)器安裝及配置文件詳解 CentOS 6.2 x86_64 安裝 nginx 1.1 ...
    xiaojianxu閱讀 8,575評(píng)論 1 41