Node.js代理请求工作到应用服务器但未能到本地主机

时间:2012-06-29 18:59:49

标签: node.js mamp

我继承了一个涉及在node.js上运行的管理员应用程序的项目,该项目与在apache上运行的类似REST的api进行通信。我对[LM] AMP非常熟悉,但对node.js来说是一个新手。

我正在尝试在我的本地机器上设置整个环境,即MAMP。

当我使用原始设置(在名为“build”的目录下的节点配置文件中),app主机指向真实服务器时,node.js站点正常运行:

var options = underscore.defaults(options, {
    ...
    port: 8000,
    proxy_app: true,
    app_host: 'www.example.com',
    app_port: 80
});

在浏览器中,转到http://localhost:8000/app/do/something会返回一些有效的json。

(我的理解是有限的,但我相信节点会将此请求代理到运行应用程序的apache服务器上。)

但是,当我将它指向我的本地服务器时......

var options = underscore.defaults(options, {
    ...
    port: 8000,
    proxy_app: true,
    app_host: 'www.mylocalexample.com',
    app_port: 80
});

现在,转到http://localhost:8000/app/do/something会返回404 Not Found。

所以这个node.js配置文件的唯一区别是主机,这是有效的(如果我直接在我的localhost上调用app api它可以工作,即我得到有效的json)。由于某种原因,node.js代理的请求似乎没有被发送到我的MAMP服务器,或者确实被发送但是MAMP拒绝它。 apache日志中没有错误。

有什么想法吗? Firebug也没有告诉我太多的使用,所以我不确定如何进一步调试。我的直觉说它必须是我的MAMP的Apache的一些设置,但我不确定它可能是什么。

1 个答案:

答案 0 :(得分:2)

据推测,您的应用正在检查HTTP请求中的Host标头以及基于它的路由(“虚拟主机”)。在您的浏览器中转到localhost...会将该标头设置为localhost,因此它与找不到www.mylocalexample.com的任何内容都不匹配。尝试在hosts文件中输入一个条目www.mylocalexample.com为127.0.0.1,然后将www.mylocalexample.com粘贴到您的浏览器中。