国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

拋棄Nginx使用nodejs做反向代理服務(wù)器

2019-11-20 14:21:07
字體:
供稿:網(wǎng)友

時下不少場景,都是申請一個 VPS 主機來托管運行 Web 項目的,小弟我也不例外,購買了一個小型的 Win 03 VPS 使用著。在使用的過程中,面臨一個問題,就是同一類型的服務(wù)端環(huán)境還好――但如果是一個 PHP、一個 ASP、 一個 JSP 的三種類型的服務(wù)端項目并存著,該怎么分配唯一的 80 端口呢?因為商業(yè) WWW 網(wǎng)站的話,往往只能占用 80  端口,――當然,如果只是做服務(wù)的話,如接口之類的,使用其他端口就不會與 80 端口沖突了。許多開發(fā)者都會面臨到 80 端口這個問題,并且實際情況會受到成本的限制。因為單獨為一個項目就買一個 VPS,也不太經(jīng)濟、不太合算,管理起來也不方便。于是,我們就應(yīng)該好好考慮一下,怎么在提供一個 80 端口的情況下,分發(fā)到多種服務(wù)端那里去,讓不同的主機執(zhí)行各自的 Web 項目。

親,那這項需求我們說可以實現(xiàn)嗎?是的,這并不是什么“神奇的技術(shù)”,也不是什么復雜的技術(shù)。不知你是否有了解,網(wǎng)絡(luò)服務(wù)中的“反向代理(Reverse Proxy)”,其中的一個功能就是可以完成端口的分發(fā)的。我們不妨以域名為路由分發(fā):凡是 AA.com 域名請求的,分發(fā)到 PHP 82 端口執(zhí)行;凡是 BB.com 域名請求的,分發(fā)到 ASP 83 端口執(zhí)行;…… 如此類推。當然這里的端口只說說明用而已,您可以任意配置,反正就是從 80 端口接收回來的請求,先作一次處理,進而分發(fā)。反向代理,通俗地講,就是左手轉(zhuǎn)右手而已。

每當提起反向代理器,人們通常一想到的就是 Nginx,但是今天我們暫時忽略大名鼎鼎的 Nginx,采用同樣也是使用單線程、事件循環(huán)的服務(wù)端小弟――Nodejs 來達成。首先 Node 采用 JS 作服務(wù)端編程,而不是 Nginx 寫配置或 Lua,比較符合我的味口,其次自己對 Node 也比較熟悉,配置各方面什么的更為順手。

完成該項功能的是 node-http-proxy 包。下載、安裝請鍵入:

npm install http-proxy

安裝完畢后,新建一個 proxy.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.');});// 另外新建一個 HTTP 80 端口的服務(wù)器,也就是常規(guī) Node 創(chuàng)建 HTTP 服務(wù)器的方法。// 在每次請求中,調(diào)用 proxy.web(req, res config) 方法進行請求分發(fā)Create your custom server and just call `proxy.web()` to proxy// a web request to the target passed in the options// also you can use `proxy.ws()` to proxy a websockets request//var server = require('http').createServer(function(req, res) { // You can define here your custom logic to handle the request // and then proxy the request. var host = req.url; host = url.parse(host); host = host.host;  console.log("host:" + req.headers.host); console.log("client ip:" + (req.headers['x-forwarded-for'] || req.connection.remoteAddress));  proxy.web(req, res, { target: 'http://localhost:8080' });});console.log("listening on port 80")server.listen(80);

若說使用代理服務(wù)器的代價,可能就是會比不用消耗多的資源,消耗多的 CPU 運算罷了。

使用問題:不能指定文件夾 proxy.web(req, res, { target: 'http://VeVB.COm:81/foo/' });

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 无为县| 克山县| 金秀| 凤阳县| 谢通门县| 滨州市| 五莲县| 天门市| 彰武县| 芒康县| 蓬溪县| 中宁县| 金华市| 霍邱县| 延边| 元江| 南丹县| 阿城市| 马龙县| 喜德县| 肇东市| 石景山区| 永康市| 威信县| 米泉市| 德安县| 通海县| 吴旗县| 安西县| 宝应县| 郎溪县| 罗山县| 河南省| 新建县| 林口县| 温宿县| 咸阳市| 宁海县| 通化县| 天祝| 乌鲁木齐市|