node.js中使用 http-proxy 創建代理服務器


代理,也稱網絡代理,是一種特殊網絡服務,允許一個終端通過代理服務與另一個終端進行非直接的連接,這樣利於安全和防止被攻擊。

代理服務器,就是代理網絡用戶去獲取網絡信息,就是信息的中轉,負責轉發。

代理又分 正向代理 和 反向代理:

正向代理:幫助局域網內的用戶訪問外面的服務。

反向代理:幫助外面的用戶訪問局域網內部的服務。

 

一、安裝 http-proxy

npm install http-proxy --save

  

二、代理本地服務

const http = require('http');
const httpProxy = require('http-proxy');

//創建一個代理服務
const proxy = httpProxy.createProxyServer();

//創建http服務器並監聽8888端口
let server = http.createServer(function (req, res) {
    //將用戶的請求轉發到本地9999端口上
    proxy.web(req, res, {
        target: 'http://localhost:9999'
    });
    //監聽代理服務錯誤
    proxy.on('error', function (err) {
        console.log(err);
    });
});
server.listen(8888, '0.0.0.0');

9999端口服務代碼:

const http = require('http');
http.createServer(function (req, res) {
    res.end('port : 9999');
}).listen(9999, '0.0.0.0');

當們在本地訪問 8888 端口時,proxy 會幫我們把請求代理到 9999 端口服務,然后返回數據。

 

二、通過host實現多個虛擬主機,共用一個端口

const http = require('http');
const httpProxy = require('http-proxy');
//創建一個代理服務
const proxy = httpProxy.createProxyServer();

//虛擬主機
const hosts = {
    'www.a.me': 'http://localhost:8888',
    'www.b.me': 'http://localhost:9999',
};

//創建http服務器並監聽80端口
let server = http.createServer(function (req, res) {
    //獲取主機名
    let host = req.headers['host'];
    host = host.split(':')[0];
    //根據主機名,找到要代理的服務
    let target = hosts[host];
    if (target) {
        proxy.web(req, res, {
            target: target
        });
        proxy.on('error', function (err) {
            console.log(err);
        });
    } else {
        res.end('end');
    }
});
server.listen(80, '0.0.0.0');

8888.js服務代碼:

const http = require('http');
http.createServer(function (req, res) {
    res.end('port : 8888');
}).listen(8888, '0.0.0.0');

9999.js服務代碼:

const http = require('http');
http.createServer(function (req, res) {
    res.end('port : 9999');
}).listen(9999, '0.0.0.0');

注意 www.a.me 和 www.b.me 這兩個域名需加入 C:\Windows\System32\drivers\etc\hosts 文件中。

127.0.0.1 www.a.me
127.0.0.1 www.b.me

當我們訪問 www.a.me 或 www.b.me 時,就會自動幫我們代理到指定端口的服務上去。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM