Apache2 代理 HTTPS 网页

Apache2 代理 HTTPS 网页

我需要代理隐藏在路由器后面的 HTTPS 页面。

Public internet 
-> Router 
-> port forwarding 443 
-> first apache2 web server 
-> need proxying to my second apache2 web server

我将端口 443 转发到我的第一个本地服务器(其中 first.example.com 在 443 上运行),但 second.example.com 在第二个 Web 服务器上运行。我需要在第一台服务器上设置代理,以便代理第二台服务器上的页面。

我尝试编辑 Apache2 虚拟主机

<VirtualHost second.example.com:443>
...
 ProxyPass / https://second.example.com/
 ProxyPassRewerse / https://second.example.com/
...
</VirtualHost>

第一个问题是,第一个 Apache2 完全忽略了 VirtualHost second.example.com...因为在本地 DNS 中,second.example.com 被路由到真实的 second.example.com

当我将 DNS 更改为路由到第一台服务器的 second.example.com 时,出现了第二个问题。ProxyPass 规则到新的 DNS 记录https://second-on-second.example.com 然后我的浏览器就无法显示 HTTPS 通信的内容了,因为出现了 SNI 错误... 因为现在证书没有对应的域。当我将 ProxyPass 更改为第二台服务器的 IP 时,会出现同样的错误。

有人能帮我做网络代理吗

答案1

应该VirtualHostfirst.example.com,执行反向代理以second.example.com

<VirtualHost *:443>
    ServerName first.example.com
    ...
    ProxyPass / https://second.example.com/
    ProxyPassRewerse / https://second.example.com/
</VirtualHost>

然后,如果两个 Web 服务器都在您的 NAT 内,则second.example.com可能无法解析为您的内部 IP 地址(假设second A 192.168.0.2),这可能会导致第二个问题。

如果您需要second.example.comHost:标题中包含,因为第二台服务器仅使用该虚拟主机名(并且该名称也在其 TLS 证书中)正确响应,请在您的第一台服务器192.168.0.2 second.example.com中添加/etc/hosts

如果您不需要在内部网络内使用 TLS,请在服务器之间使用纯 HTTP:

  • 在第二台服务器上

    • 无需 TLS 即可使用<VirtualHost *:80>
    • 添加ServerAlias 192.168.0.2以使其无需工作/etc/hosts
  • 在第一台服务器上,具有以下反向代理配置:

    <VirtualHost *:443>
        ServerName first.example.com
        ...
        ProxyPass / http://192.168.0.2/
        ProxyPassRewerse / http://192.168.0.2/
    </VirtualHost>
    

相关内容