将 HTTP 流量重定向到 Apache 反向代理中同一端口上的 HTTPs

问题描述 投票:0回答:1

我有一个使用 Apache 在端口 2000 上运行的反向代理。

它正在侦听同一端口上正在广播 HTTP 的另一个 Web 服务器。

我可以让反向代理正常运行,并且 HTTPS 正常工作,当我访问 http:// 时,它会返回 400 Bad Request,这很好。

但是,我想自动将任何 HTTP 流量重定向到 HTTPS。我尝试过使用 RewriteEngine,但没有成功。

我正在使用 Docker Compose,此配置位于 httpd 配置中。

HTTPS 工作正常但未发生重定向的示例:

<VirtualHost *:2000>
    SSLEngine on
    SSLCertificateFile /crt/cert.crt
    SSLCertificateKeyFile /crt/key.key

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    ProxyPreserveHost On
    ProxyPass / http://dockercontainer:2000/
    ProxyPassReverse / http://dockercontainer:2000/
</VirtualHost>

它们都需要匹配相同的端口。

谢谢。

docker apache mod-rewrite reverse-proxy
1个回答
0
投票

您遇到的问题可能是因为在建立 SSL 之后正在处理 RewriteEngine 和相关指令,这意味着您当前的 配置中不会满足 RewriteCond %{HTTPS} off 条件。要将 HTTP 流量正确重定向到 HTTPS,您需要有一个单独的块侦听端口 80(或设置中的 HTTP 等效端口)来处理重定向。

以下是修改 Apache 配置以实现 HTTP 到 HTTPS 重定向的方法:

# HTTP VirtualHost to redirect all HTTP traffic to HTTPS
<VirtualHost *:2000>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

# HTTPS VirtualHost to handle reverse proxy with SSL
<VirtualHost *:2000>
    SSLEngine on
    SSLCertificateFile /crt/cert.crt
    SSLCertificateKeyFile /crt/key.key

    ProxyPreserveHost On
    ProxyPass / http://dockercontainer:2000/
    ProxyPassReverse / http://dockercontainer:2000/
</VirtualHost>
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.