在开始之前,我是一名开发人员,而不是系统管理员(但由于我所在公司的规模,我也必须承担这个角色),所以如果我犯了任何愚蠢的错误,请原谅。
我正在尝试在同一台服务器上运行多个不同的 Rails 应用程序实例,每个实例都有自己的子域,例如和,test.mydomain.com
并sales.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 指令。