本文用于輔助這個問題的解答:
服務器的同學,一個服務器怎么運行多個小程序
分享者:孟星魂,原文地址
最近自己動手做了一個微信小程序,是直接買的騰訊云的小程序解決方案,怎么說那,用起來還是會遇到不少問題的,不過在交流群里還是會有很多人幫助你的。
閑話少說,因為要再做一個別的服務,就想直接用這臺小程序的服務器就好了,但是服務器的80端口已經被小程序占用了,所以只能使用反向代理,說白了就是完成端口的分發。我們不妨以域名為路由分發:凡是 AA.com 域名請求的,分發到 PHP 82 端口執行;凡是 BB.com 域名請求的,分發到 ASP 83 端口執行;…… 如此類推。當然這里的端口只說說明用而已,您可以任意配置,反正就是從 80 端口接收回來的請求,先作一次處理,進而分發。反向代理,通俗地講,就是左手轉右手而已。
放到我實際的項目里面,先npm init一個新的項目,安裝http-proxy插件用來反向代理,這個服務占用80接口,然后我把之前小程序占用的80接口,改為了3000接口。(這個端口號大家隨便選)。
在項目下面新建一個app.js文件,內容如下:
-
-
var http = require('http'), httpProxy = require('http-proxy');
-
-
// 新建一個代理 Proxy Server 對象
-
var proxy = httpProxy.createProxyServer({});
-
-
// 捕獲異常
-
proxy.on('error', function (err, req, res) {
-
res.writeHead(500, {
-
'Content-Type': 'text/plain'
-
});
-
res.end('Something went wrong. And we are reporting a custom error message.');
-
});
-
-
// 在每次請求中,調用 proxy.web(req, res config) 方法進行請求分發
-
var server = require('http').createServer(function(req, res) {
-
// 在這里可以自定義你的路由分發
-
var host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
-
console.log("client ip:" + ip + ", host:" + host);
-
-
switch(host){
-
case 'www.111.cn':
-
proxy.web(req, res, { target: 'http://localhost:3000' });
-
break;
-
case 'vote.111.cn':
-
proxy.web(req, res, { target: 'http://localhost:9527' });
-
break;
-
default:
-
res.writeHead(200, {
-
'Content-Type': 'text/plain'
-
});
-
res.end('Welcome to my server!');
-
}
-
});
-
-
console.log("listening on port 80")
-
server.listen(80);
如代碼所示,當訪問www.111.cn的時候,請求就被轉發到了3000接口上,訪問vote.111.cn時就被轉發到了9527這個接口上,自己當時很困惑的是怎么在小程序的80接口上去做轉發,其實80是個獨立的服務,只做轉發這個一件事情,別的服務都要放到別的端口上去的。
用node做服務器的話,推薦大家用pm2來做管理,這樣可以把一臺服務器上的所有服務都監管起來,利于開發調試。
|