使用 apache 的 HTTPS 反向代理

使用 apache 的 HTTPS 反向代理

我正在使用这个 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 请求重定向而不是代理,您应该做两件事:

  1. 将您的代理配置(SSLProxyEngine通过)ProxyPassReverse移到 SSL 虚拟主机中/etc/httpd/conf.d/ssl.conf,以便它只在那里应用

  2. 创建一个将重定向的 HTTP 虚拟主机 - 可能位于以下新.conf文件中/etc/httpd/conf.d

    <VirtualHost *:80>
      ServerName redirect
      RewriteEngine On
      RewriteRule ^(.*) https://%{HTTP_HOST}/$1
    </VirtualHost>
    

相关内容