我有一台无法从公众访问的内联网服务器。此外,我还有一台运行 Apache 反向代理的服务器。
内联网:intranet.domain.com 反向代理:external.domain.com
这是我的配置
<VirtualHost *:443>
ServerName external.domain.com
ErrorLog /var/log/apache2/reverseproxy-error-log
CustomLog /var/log/apache2/reverseproxy-access-_log combined
LogLevel warn
AddDefaultCharset utf-8
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
Forwarding Intranet to external
ProxyPass / https://intranet.domain.com/
ProxyPassReverse / https://intranet.domain.com/
ProxyErrorOverride Off
</VirtualHost>
我删除了设置 SSL 证书等的部分,因为这不是问题
当我现在加载 external.domain.com 时,网站正在加载,但所有图片和 css 都未加载,因为它是从 intranet.domain.com 加载的,所以我得到 404。
例如,我看到的是一个 GET 请求。
scheme
https
host
intranet.domain.com
filename
/fileadmin/user_upload/Admin/Header/Header_Telefon.jpg
所以我现在的问题是如何重写该请求以便主机external.domain.com代替intranet.domain.com
因为当我尝试这个网址时https://external.domain.com/fileadmin/user_upload/Admin/Header/Header_Telefon.jpg我可以毫无问题地看到该图像。
答案1
您需要配置在 internal.domain.com 上运行的应用程序,以便它只生成相对 URL,或使用域 external.domain.com 的 URL。Apach 的 proxypassreverse 无法更改响应主体内的 URL。