我有一个 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 症状。