Node.js -- 代理服务器与虚拟主机

    xiaoxiao2021-04-15  260

     代理,也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

    正向代理:简单说就是客户端知道它要访问的IP地址,但是它不能直接去访问,交给一个代理服务器,然后代理服务器代替它去访问。比如公司的内部网,你想要访问外网必须借助公司的代理服务器。

    作用:访问原来无法访问的资源,如google     可以做缓存,加速访问资源对客户端访问授权,上网进行认证    代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

    反向代理:客户端对反向代理是无感知的,客户端将请求发送给服务器后,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

    比如类似数据库服务器这样的不应该暴露在外网上面。

     

    作用:保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击    负载均衡,通过反向代理服务器来优化网站的负载

    使用http-proxy我们来简单试试反向代理。

    const http = require("http"); const httpProxy = require("http-proxy"); const proxyServer = httpProxy.createProxyServer();//创建一个代理服务器 const server = http.createServer(function (req, res) { proxyServer.web(req, res, { target: "http://localhost:9000" }); }); server.listen(8000); const server = http.createServer(function (req, res) { res.end("9000") }); server.listen(9000);

    当我们访问localhost:8000时,就会将请求代理带localhost:9000,然后页面上显示9000.

     

    虚拟主机:简单的说就是实现多个网站共用一个端口,多个网站共用一个主机。

    我们简单的在本机演示一下!

    我们打开这个文件。

    简单配置一下。。

    我们配置了俩个域名,也就是说当我们在浏览器上面访问这俩个域名时,就会默认都代理到本机的80端口。

    (注意得使用管理员身份打开文件) 

    1:windows键+x  以管理员身份运行powershell 

    进入刚刚那个目录, 然后.(记事本打开)然后修改保存即可。

    然后我们使用node开启一个服务器,端口号为80.

    const server = http.createServer(function (req, res) { res.end("80") }); server.listen(80, ()=> { console.log("80端口已经打开") });

    然后访问aaa.combbb.com 

     

    我们假象一下,我这个本地服务器就是一个线上服务器,然后aaa.com bbb.com就是我们购买得域名,那么我们就简单实现了俩个域名绑定在一个服务器上面,但是这有一个问题?既然是俩个域名那么访问的东西就不应该一样,服务器端如何区分到底是aaa.com访问的还是bbb.com访问的?这是就是host字段的作用了,它指明了访问服务器的来源域名。

    然后结合上面的代理服务器我可以简单实现一个小功能。

    我们将aaa.com 代理带8000端口的服务器  将bbb.com代理到9000端口的服务器

    const http = require("http"); const httpProxy = require("http-proxy"); const ps = httpProxy.createProxyServer(); let config = {//config表示映射表 "aaa.com": "http://localhost:8000", "bbb.com": "http://localhost:9000" } const server = http.createServer(function (req, res) { const host = req.headers["host"]; console.log(host); if (host) { ps.web(req, res, { //targt表示需要代理的服务器IP地址 target: config[host] }) }; }); server.listen(80, ()=> { console.log("80端口已经打开") }); const http = require("http"); http.createServer(function (req, res) { res.end("8000"); }).listen(8000, ()=> { console.log("8000端口打开") }); const http = require("http"); http.createServer(function (req, res) { res.end("9000"); }).listen(9000, ()=> { console.log("9000端口打开") });

    访问aaa.com 

    访问bbb.com 

     

    aaa.com  bbb.com都是访问的localhost:80端口,然后我们使用http-proxy又将请求代理到其他服务器上面。


    最新回复(0)