轉(zhuǎn)載請注明原作者点骑,如果覺得有用,不用請我喝咖啡:D
最近數(shù)次遇到這種情況:硬件資源有限袁辈,但有些開發(fā)配置要求比較嚴(yán)苛(如在微信公眾號(hào)進(jìn)行接口配置或安全域名配置),要求80端口甚至頂級(jí)域名荞彼。但服務(wù)器的80端口早就被之前的已經(jīng)上線的應(yīng)用占掉了。
因此做了一些嘗試癌压,最終解決了訪問問題滩届。
需求
- 只有一臺(tái)服務(wù)器,一個(gè)IP券犁;
- 服務(wù)器上有多個(gè)應(yīng)用運(yùn)行在不同的端口荞估。例如:
- 127.0.0.1:4000 運(yùn)行著一個(gè)node.js寫的博客應(yīng)用
- 127.0.0.1:3009 運(yùn)行著一個(gè)微信公眾號(hào)機(jī)器人的后臺(tái)
- 希望不同的域名跪腹,都解析到該IP的80端口缅帘,但是轉(zhuǎn)發(fā)到不同的端口去:
- www.me.com 能訪問到127.0.0.1:4000的應(yīng)用
- 新增一個(gè)mysite.mydomain.com 能訪問到127.0.0.1:3009的微信后臺(tái)(微信要求綁定服務(wù)器時(shí)綁定的是80端口)
思路
域名都解析到該服務(wù)器的IP下钦无,通過Nginx區(qū)分主機(jī)頭失暂,從而決定請求訪問到哪個(gè)應(yīng)用。
相當(dāng)于門衛(wèi)將不同的來者領(lǐng)到不同的房間摧冀。
最終通過對Nginx的配置實(shí)現(xià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端口的偵聽
注意本例中,要新添加的解析二級(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è)用來匹配www.me.com,一個(gè)用來匹配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中加好后,使用如下命令測試一下配置文件是否可用。以我自己的為例:
/usr/local/webserver/nginx/sbin/nginx -t
通過后,再重啟nginx辐赞。
/usr/local/webserver/nginx/sbin/nginx -s reload
先檢查一下原有的域名訪問是否一如既往。
注意測試前可清除一下DNS緩存。
如果是Mac系統(tǒng),使用如下命令:
sudo dscacheutil -flushcache
Part 2: 域名商操作
在域名商(域名在哪家買的就去哪家)處,增加新域名(二級(jí)域名)的A記錄解析到該IP位谋。
Part 3: 空間商操作
一般的服務(wù)器秆剪,解析后即可生效陶缺,不需要在空間商處做額外的動(dòng)作。
但如果域名商為西部數(shù)據(jù)且空間是國內(nèi)要備案的那種空間汤锨,則需要:
- 為你的IP添加白名單,填寫時(shí)要求填寫頂級(jí)域名。即聂抢,你只是想為mysite.mydomain.com解析闸拿,但添加時(shí)要填寫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。
之后就通過不同域名訪問,看看是否導(dǎo)向了不同的應(yīng)用即可。
~ END ~
參考
受益于如下這些文章:
Nginx實(shí)現(xiàn)多個(gè)站點(diǎn)使用一個(gè)端口(配置Nginx的虛擬主機(jī))