今天我有两台 Apache 服务器,服务器 A(192.168.0.5),服务器 B(192.168.0.10),都在同一个 80 端口上运行。
实际请求来自服务器 a,并且根据我的配置它传递到服务器 b(使用 mod_proxy),这是可行的。
服务器A配置:
NameVirtualHost *
<VirtualHost *>
ServerName owncloud.mydomain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.0.10:80/
ProxyPassReverse / http://192.168.0.10:80/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
当我访问 mycloud.mydomain.com 时,请求是使用服务器 A 进行访问,但使用代理它会“代理”到服务器 B,然后我看到服务器 B 中的内容,这很好,但现在我的内容在 mycloud.mydomain.com/owncloud 中,我不知道如何仅使用 mycloud.mydomain.com 来代理和重定向该 url。
这是我在服务器 A 中使用 mod_proxy 的其他配置
RewriteCond %{HTTP_HOST} ^mycloud\.mydomain\.com$ [NC]
RewriteRule ^/(.*)$ http://mycloud.mydomain.com/$1 [P]
我希望当用户访问 mycloud.mydomain.com 时 mod_proxy 重定向并代理到 mycloud.mydomain.com/owncloud。
我怎样才能做到这一点?
由我编辑
我的新配置是:
RewriteCond %{HTTP_HOST} ^owncloud\.mydomain\.com$ [NC]
RewriteRule ^/(.*)$ http://192.168.0.10:80/owncloud/$1 [P,L]
ProxyPassReverse / http://192.168.0.10:80/owncloud/
我正在重定向到 owncloud.mydomain.com,但页面渲染效果不佳(例如某些 css 无法加载),但如果我仅添加 /owncloud,则一切正常,但我不希望用户添加 /owncloud。这没有按预期工作,我做错了什么吗?
答案1
使用以下行稍微改变这些代理:
RewriteRule ^/(.*)$ http:///192.168.0.10:80/owncloud/$1 [P,L]
ProxyPassReverse / http://192.168.0.10:80/owncloud/
这些行应该替换这些行:
ProxyPass / http://192.168.0.10:80/
ProxyPassReverse / http://192.168.0.10:80/
上面几行表示进入的连接/
转到http:///192.168.0.10:80/owncloud/
(RewriteRule),并且从代理服务器返回的连接/owncloud/
被重写到/
(ProxyPassReverse)。
答案2
我也遇到了同样的问题。我认为 apache 配置是正确的,但你需要在 owncloud 的 config.php 中进行一些更改,例如
'overwritehost' => 'apacheVhost.domain.com',