【发布时间】:2013-09-03 20:07:08
【问题描述】:
我正在尝试在我的 EC2 实例上为我的 Node.js 服务器设置代理,以便我可以通过 http://*.amazonaws.com/node 之类的方式访问它,其中 * 是 URI 的其余部分。我已经通过编辑/etc/httpd/conf/httpd.conf 设置了代理:
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /node http://*.amazonaws.com:3000
ProxyPassReverse /node http://*.amazonaws.com:3000
我的 Node.js server.js 文件如下所示:
var port = process.env.PORT || 3000;
var host = '*.amazonaws.com' || process.env.HOST || '127.0.0.1';
所以当我一切就绪并运行时,我可以访问 /node,但是,Node.js 的 /public 目录并没有被用作 Document 的根目录,所以对于 index.html 包含的任何文件,我都会得到 404,因为它假设它位于 /public 目录中。例如,Firebug 报告 http://*.amazonaws.com/javascripts/rails.js 和其他 3 个文件的 404,这意味着这没有命中 Node.js 的 /public 目录。
请注意,如果我编辑 index.html 文件中的路径,一切正常,但我宁愿不必这样做......另外,如果我在 httpd.conf 中取出 ProxyPass 配置,并且只是从http://*.amazonaws.com:3000 访问节点服务器,它可以工作......但理想情况下,我希望不必这样做并且能够做到 /node。
我想知道的是,我的代理配置是否正确,如果没有,我该如何修复它,以便当我访问 /node 时,所有请求的文件都会自行重定向?
【问题讨论】:
-
你的节点目录结构是什么? index.html 文件是公开的吗?您能否发布您的节点代码(或者至少是主文件,如果您使用的是 express,通常是 app.js)
-
请求未命中公共(静态文件)目录的事实不一定是由于代理配置错误。你的中间件的顺序是什么或者你把
app.use(express.static(__dirname + '/public'));放在哪里? -
正如我在其他评论中所解释的,我使用 CompoundJS 作为脚手架/MVC 框架。它使用 Express,但它基本上将所有这些从我身上抽象出来。我会做一些挖掘,然后回复你。
标签: apache node.js amazon-web-services proxy amazon-ec2