使用node-http-proxy时隐藏WordPress URL中的端口号

时间:2013-08-01 10:33:56

标签: wordpress apache node.js proxy port

我正在使用节点模块node-http-proxy将特定虚拟主机重定向到几个WordPress站点的Apache。我的节点'服务器'侦听端口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是位于Apache服务器后面的潜在WordPress站点。端口9000是一个潜在的节点应用程序,可以在其他地方收听。

任何关于这是否是一种伪劣方式的见解也会受到欢迎。

1 个答案:

答案 0 :(得分: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方法与我之前的方法不同仍然暗示着我。任何进一步的理解都将成为这篇文章的一个受欢迎的补充。