【发布时间】: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