我正在使用这个 apache 配置来为在同一台机器上运行的进程设置反向代理,在端口 8443 上,
<Directory "/var/www/html">
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1
</Directory>
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyPass / https://127.0.0.1:8443/
ProxyPassReverse / https://127.0.0.1:8443/
</IfModule>
8443 上运行的进程已设置 HTTPS/SSL 证书。这是有效/良好的配置吗?或者我可以做得更好吗?
我注意到,目前即使 http:// 也会代理到 https://,而无需重写。我认为这可能会损害 SSL?我宁愿只将 443 代理到 8443,然后仅使用 URL 重写将 http:// 请求重写为 https:// 请求。使用 apache 可以做到这一点吗?
谢谢。
编辑- 以下是请求的虚拟主机信息,
VirtualHost Configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443 127.0.0.1 (/etc/httpd/conf.d/ssl.conf:74)
Syntax OK
答案1
为了使 HTTP 请求重定向而不是代理,您应该做两件事:
将您的代理配置(
SSLProxyEngine
通过)ProxyPassReverse
移到 SSL 虚拟主机中/etc/httpd/conf.d/ssl.conf
,以便它只在那里应用创建一个将重定向的 HTTP 虚拟主机 - 可能位于以下新
.conf
文件中/etc/httpd/conf.d
:<VirtualHost *:80> ServerName redirect RewriteEngine On RewriteRule ^(.*) https://%{HTTP_HOST}/$1 </VirtualHost>