根据 URL 路径创建代理

Posted

技术标签:

【中文标题】根据 URL 路径创建代理【英文标题】:Create proxy according URL path 【发布时间】:2015-09-06 05:37:03 【问题描述】:

我需要根据来自浏览器的一些 URL 创建代理, 因为我对这个主题相当陌生,所以我不知道如何测试它......:( 我需要一些方法来测试它,看看这确实有效 我使用此博客中的以下代码

http://blog.nodejitsu.com/node-http-proxy-1dot0/

var httpProxy = require('http-proxy')

var proxy = httpProxy.createProxy();

var options = 
    'foo.com': 'http://website.com:8001',
    'bar.com': 'http://website2.com:8002'


require('http').createServer(function(req, res) 
    proxy.web(req, res, 
        target: options[req.headers.host]
    );
).listen(8000);

我需要的是,当您输入浏览器 localhost:8000 时,您将路由(代理)到具有不同路径的新服务器,如选项中所述。

【问题讨论】:

那么问题出在哪里? 你不能放置 localhost:8000 并被重定向,因为req.headers.host 将是 localhost:8000 并且它与你的 options 上的任何内容都不匹配 【参考方案1】:

如果您希望用户键入 foo.com,请转到 http://website.com:8001,您需要为 foo.com 设置一个虚拟主机,例如 nginx

Nginx 将为 foo.com 和 bar.com 托管虚拟主机,这将是 Node.js 应用程序的“代理通行证”。

当用户访问 foo.com 时,它会获取您的 Nginx 服务器,该服务器会将请求传递给您的 Node 应用程序,该应用程序会将请求代理到您在选项中设置的相对 URL。

如果你需要,我可以给你所需的 Nginx 配置。

Nginx 虚拟主机配置:

server 
    listen 80;

    server_name foo.com bar.com;

    location / 
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    

当然你需要将 foo.com 和 bar.com DNS 指向 Nginx/Node 服务器。 Node 应用程序非常好。你不再需要任何东西了。启动 Nginx 和 Node 就完成了。

【讨论】:

Michelem 感谢您的支持,已投票! ,你能提供我可以测试的完整代码吗,(我对这个主题很陌生......) ngix 是节点的一部分,我可以使用一些模块吗?由于我在 RT 期间需要它,我可以通过代码配置它吗? 顺便说一句,你不认为 http-proxy 应该做服务器代理吗?至少从他们处理这个的文档中,我的问题是我没有找到如何使用它的好例子...... Nginx 是一个在您的域上接受请求的 Web 服务器,您也可以在没有 Nginx 的情况下使用 Node.js 完成所有操作,请看这个:***.com/questions/9368794/…

以上是关于根据 URL 路径创建代理的主要内容,如果未能解决你的问题,请参考以下文章

nginx代理转发url接口请求路径到spring boot后端实现真正响应

Nginx的location匹配规则-根据url 路径重定向到不同的IP

相同的 URL 路径,但根据用户角色加载不同的组件 - Angular

proxy_pass根据path路径转发时的"/"问题记录

根据 url 路径重定向到不同的服务器

Nginx location 路径替换(配置 后路径映射问题)