【问题标题】:Hiding port number in WordPress URL when using node-http-proxy使用 node-http-proxy 时在 WordPress URL 中隐藏端口号
【发布时间】:2013-08-01 23:36:57
【问题描述】:

我正在使用节点模块 node-http-proxy 将特定虚拟主机重定向到 Apache,用于几个 WordPress 站点。我的节点“服务器”侦听端口 80,并重定向到 Apache 正在侦听的 SOME_OTHER_PORT。

它工作正常(当我根据用户的建议更改 WordPress 设置以考虑 SOME_OTHER_PORT 时)。但是端口号总是包含在 WordPress 网站上每个页面的 URL 中。有没有其他方法可以让我不必看到这些丑陋的端口号?

如果不对我的设置进行重大更改,我无法想象这是可能的,但我认为值得一问。

这是我在节点中用于代理的代码:

// Module dependancies
var httpProxy = require('http-proxy'),
express = require('express')(),
connect = require('connect');

// Http proxy-server
httpProxy.createServer(function (req, res, proxy) {

    // Host Names and Ports
    var hosts = [
        'www.some-website.co.uk'
    ];

    // Ports

    var ports = [

        8000

    ];

    var host = req.headers.host;
    var port = hosts.indexOf(host) > -1 ? ports[hosts.indexOf(host)] : 9000;

    // Now proxy the request
    proxy.proxyRequest(req, res, {
        host: host,
        port: port
    });
})
.listen(80);

端口80 是我所有流量的来源。端口8000 是一个潜在的 WordPress 站点,位于 Apache 服务器后面。端口9000 是一个潜在的节点应用程序在其他地方监听。

也欢迎任何关于这是否是一种伪劣的方法的见解。

【问题讨论】:

  • 您是重定向还是反向代理?如果您只是代理从端口 80 到端口 xxxx 的请求,则不需要该端口在任何 url 或设置中可见。
  • @AndreasHultgren 我已经用我在节点中使用的特定代理代码更新了这个问题。我不确定这是反向代理还是正常。您是说反向代理实际上会导致浏览器上的重定向吗?详细说明反向代理和标准代理之间的差异将是可投票的。 :-)
  • 唯一的区别是您认为要连接的目标是什么,但我想它比这里的评论更令人困惑(but this SO answer is better than anything I could hope to write)。不清楚的是您是代理还是重定向请求。你应该做前者,因为重定向会改变浏览器中的 url。如果它没有(您仍然看到端口 80)出于所有意图和目的,您的浏览器和 WP 都应该像在端口 80 上运行一样。
  • 从你的代码来看,在我看来你正在代理你应该做的事情。
  • @AndreasHultgren 不,该端口当前在 WordPress 网站上显示 8000(这是我随机决定分配给 www.some-website.co.uk 的端口)。除了以正确的方向传输传入的请求外,任何时候都不会使用端口 80。一旦它将请求转发到 WordPress 站点的端口 8000,URL 地址就会将:8000 混合在一起——这是我的问题。该网站可以运行,但 URL 很丑陋,更不用说暴露了。

标签: wordpress apache node.js proxy port


【解决方案1】:

我现在以一种更简单的方式进行了这项工作。事实证明,我使用 hostsports 数组的自定义路由是多余的。我不完全确定为什么这会有所不同,以及是否是因为以下代码是反向代理而不是正向代理,但我继续并在node-http-proxy 的 GitHub 页面上实现了其中一个示例拥有预期的结果:

var options = {
  hostnameOnly: true,
  router: {
    'www.some-apache-website.co.uk': '127.0.0.1:9000',
    'www.some-node-website.co.uk': '127.0.0.1:8000'
  }
};

var proxyServer = httpProxy.createServer(options);

proxyServer.listen(80);

这有效地(并且使用更少的代码)根据主机名反向代理网站。结果是我的 WordPress 站点(位于 Apache 服务器后面)不再需要知道它在哪个端口上,因为该端口现在隐藏在反向代理后面。

为什么这个node-http-proxy 方法与我以前的方法不同仍然暗示着我。任何进一步的理解都将是这篇文章的一个受欢迎的补充。

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2018-04-20
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多