【问题标题】:Node.js proxy through Apache on Amazon EC2通过 Amazon EC2 上的 Apache 的 Node.js 代理
【发布时间】: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


【解决方案1】:

我同意评论者的观点,如果您使用 express 静态中间件,您可能错误地配置了 express。

但是,如果您希望 apache 处理静态请求,无论如何,这是用于产生 ProxyPass 异常的 apache 配置语法:

ProxyPass /javascript/ !

您还需要确保设置了DocumentRoot,但这应该将任何对 javascript 目录的请求传递给常规 apache,后者将以您配置的任何方式处理对该目录的请求。

【讨论】:

  • 嗯,好的。我正在使用 CompoundJS,它确实使用 Express。当我有机会时,我必须研究一下。
  • 我已经在 nginx 中类似地解决了它......它使用 alias 而不是 root。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 2014-01-07
  • 2019-08-10
相关资源
最近更新 更多