我在同一台服务器上运行 Apache 和自定义非 Apache Web 服务。我尝试让 Apache 反向代理 SSL 连接另一个站点,以防止当有人在浏览器中输入地址访问我的站点时出现 SSL 警告 (https://xx.xx.xx.xx)。我希望在这种情况下请求能够自动更改为 FQDN 请求,以防止出现证书警告。
我的网站运行在自定义服务(不是 Apache)上,它无法阻止这种情况。我的计划是设置 Apache 监听 443 并重定向到同一台机器上的端口 80,并使用某种重写规则来阻止直接 IP 访问,或重定向它。
我可以让该部分正常工作,但直接发送到 IP 的请求不会自动重定向到对名称的请求。端口 8080 上部分工作的测试配置如下。
<VirtualHost *:8080>
ServerName fqdn
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/Cert.crt
SSLCertificateKeyFile /etc/httpd/ssl/Key.key
SSLCertificateChainFile /etc/httpd/ssl/TrustedRoot.crt
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://fqdn:80/
ProxyPassReverse / http://fqdn:80/
ErrorLog logs/myserver-error_log
CustomLog logs/myserver-access_log common
</VirtualHost>
我尝试了一些重写指令,但收效甚微。此外,javascript 重定向也无法阻止 SSL 错误。有什么想法吗?
答案1
将您的服务更改为监听外部无法访问的端口,例如 8888。Apache 应该处理每个传入请求,并针对您不满意的请求发送重定向(重写)。那些满足条件的请求,例如 FQDN:
ProxyPass / http://127.0.0.1:8888/
ProxyPassReverse / http://127.0.0.1:8888/
在端口 443 上添加一个虚拟主机以用于安全请求(https/SSL),并为那些不使用 FQDN 进入系统的请求添加一个默认服务器。