首先,我正在使用apache作为在机器中另一个端口上运行的应用程序的HTTP服务器。
<VirtualHost *:80>
ProxyPreserveHost On
ServerName domain.com
ServerAlias *.domain.com
ProxyPass /excluded !
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>
该应用会识别以下网址:domain.com/accounts/profile,但我想要做的是使用accounts.domain.com/profile
如果我使用另一个带有ProxyPass的VirtualHost来添加子域,则应用程序将无法运行,因为如果我执行此操作,应用程序只能理解路由/帐户/配置文件:
<VirtualHost *:80>
ProxyPreserveHost On
ServerName accounts.domain.com
ProxyPass /excluded !
ProxyPass / http://127.0.0.1:9000/accounts/
ProxyPassReverse / http://127.0.0.1:9000/accounts/
</VirtualHost>
并转到accounts.domain.com/profile,该应用只会使用/ profile /。 我可以通过进一步配置VirtualHost和代理来实现这一目标吗?
我也读过其他可能使用重写的地方,我可以修复它,就像.httaccess文件的工作原理一样。 我正在尝试这样的事情
<VirtualHost *:80>
ProxyPreserveHost On
ServerName domain.com
ServerAlias *.domain.com
ProxyPass /excluded !
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
RewriteEngine On
RewriteCond %{HTTP_HOST} ^accounts\.domain\.com$ [NC]
RewriteRule "^/(.*)$" "http://domain.com/accounts/$1" [P]
</VirtualHost>
最终给了我502代理错误
代理错误
代理服务器收到来自上游服务器的无效响应。 代理服务器无法处理请求GET / profile。
原因:从远程服务器读取错误
此外,尝试时遇到502 Bad Gateway错误 使用ErrorDocument来处理请求。
有关如何使其正常工作的任何提示?这是我第一次使用Apache而不是托管php网站,之前我的.httaccess是非常基本的。
编辑:感谢Simon在评论中指出我的错误,我无法代理ServerName。我觉得现在真的很蠢。