我继承了一个涉及在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的一些设置,但我不确定它可能是什么。
答案 0 :(得分:2)
据推测,您的应用正在检查HTTP请求中的Host
标头以及基于它的路由(“虚拟主机”)。在您的浏览器中转到localhost...
会将该标头设置为localhost
,因此它与找不到www.mylocalexample.com
的任何内容都不匹配。尝试在hosts
文件中输入一个条目www.mylocalexample.com
为127.0.0.1,然后将www.mylocalexample.com
粘贴到您的浏览器中。