Apache 代理/使用一个 IP 将 https 重定向到 https

Apache 代理/使用一个 IP 将 https 重定向到 https

我有一个 WAN-IP,带有一个托管 A.domain.com 的 apache 网络服务器,我将反向代理到 B.domain.com 到同一本地网络中的另一台服务器。

没有 SSL,我在 vhosts 中用以下方式解决了这个问题:

<VirtualHost *:80>
ServerName Z.domain.com
ProxyRequests Off

ProxyPass / http://1.1.1.7/
ProxyPassReverse / http://1.1.1.7/

但启用 SSL 后它就无法以这种方式工作......

为了更好地理解我尝试画出来:

                                       -- A.domain.com(local IP:1.1.1.1)
                                      |
WAN --¦Firewall (NAT to 1.1.1.1) ¦-- LAN
                                      |
                                       -- B.domain.com(local IP:1.1.1.2)

服务器 1.1.1.1 应重定向至 1.1.1.2

我的配置/etc/apache2/sites-available/B.domain.com.conf:

<VirtualHost *:443>
        ServerName B.domain.com
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/B.domain.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/B.domain.com/privkey.pem

        ProxyRequests Off
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / https://1.1.1.2/
        ProxyPassReverse / https://1.1.1.2/
</VirtualHost>

我已经使用以下命令激活了它:a2ensite B.domain.com 并重新启动了 apache。如果我调用该网站,结果会出现内部服务器错误。如果没有,我也会遇到同样的错误。

如果我打电话,apache2ctl -S看起来一切都很好。

答案1

我尝试了来自 ezra-s“SSLProxyEngine on”的信息,但仍然收到错误:

代理服务器无法处理请求 GET /

原因:与远程服务器 SSL 握手期间出错

经过一番搜索,我找到了一个可行的解决方案。

我的配置 /etc/apache2/sites-available/B.domain.com.conf 现在:

<VirtualHost *:443>
    ServerName B.domain.com
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    SSLCertificateFile /etc/letsencrypt/live/B.domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/B.domain.com/privkey.pem

    ProxyPass / https://1.1.1.2/
    ProxyPassReverse / https://1.1.1.2/

但是现在来自外部的连接还安全吗?

答案2

尝试一个更简单的方法,将 ProxyPasshttps改为http

    ProxyPass        / http://1.1.1.2/
    ProxyPassReverse / http://1.1.1.2/

对于前端来说,这很常见(也称为反向代理) 如果您合理地保护了 1.1.1.0 网络,则可以通过纯 http 与后端通信。

您可能根本没有在 1.1.1.2 上实现 https 服务器……这会给您带来您所描述的内部错误 50x 症状。

相关内容