使用 ProxyPass 通过 Apache 提供 Rails 应用时某些请求会失败

使用 ProxyPass 通过 Apache 提供 Rails 应用时某些请求会失败

在开始之前,我是一名开发人员,而不是系统管理员(但由于我所在公司的规模,我也必须承担这个角色),所以如果我犯了任何愚蠢的错误,请原谅。

我正在尝试在同一台服务器上运行多个不同的 Rails 应用程序实例,每个实例都有自己的子域,例如和,test.mydomain.comsales.mydomain.com为和提供静态站点mydomain.com服务www.mydomain.com

不幸的是,它是 Windows 服务器(因为 Windows 只支持第三方)。我们使用 Apache。

我目前的设置几乎可以正常工作(有一段时间我确实认为它可以正常工作)。

我有两个应用程序实例在端口 3000 和 30001 上运行,并且在我的 httpd.conf 末尾设置了以下虚拟主机:

<VirtualHost *:80>
       ServerName mydomain.com
       ServerAlias www.mydomain.com
       DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/website"
</VirtualHost>
<VirtualHost *:80>
       ServerName test.mydomain.com
       ServerAlias test.mydomain.com
       ProxyPass / http://localhost:3000/
       ProxyPassReverse / http://localhost:3000/
       ProxyPreserveHost On
</VirtualHost>
<VirtualHost *:80>
       ServerName sales.mydomain.com
       ServerAlias sales.mydomain.com
       ProxyPass / http://localhost:3001/
       ProxyPassReverse / http://localhost:3001/
       ProxyPreserveHost On
</VirtualHost>

通过此设置,静态网站可以正常工作,并且我可以通过访问各自的域来访问这两个 Rails 应用程序。

然而,每个 Rails 应用程序中的某些请求不起作用。我收到如下错误:

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /posts/4eaad77ec5b0d6569a3000054.

Reason: Error reading from remote server

总是相同的 URL,虽然我还没能找出规律,但这(胡乱猜测)似乎暗示着它可能与 URL 重写有关?老实说,我一点头绪都没有。

以下是一些有效 URL 的示例:

http://sales.mydomain.com/people
http://sales.mydomain.com/people/4eabd77cc4d0e709f8000034/edit

一些 URL 的示例工作有:

http://sales.mydomain.com/people/4eabd77cc4d0e709f8000034
http://sales.mydomain.com/posts/new?person_id=4eabd77cc4d0e709f8000034

提前感谢您的帮助 - 我非常感激。

答案1

代理服务器从上游服务器接收到无效响应。

这是您的 Rails 框架发出的错误。请检查其日志以查找该错误。

另外,从 Rails 代理中删除多余的 ServerAlias 指令。

相关内容