我有一個 WAN-IP 和一個託管 A.domain.com 的 apache 網頁伺服器,我將把 B.domain.com 反向代理到同一本地網路中的另一台伺服器。
沒有 SSL 我在虛擬主機中這樣解決了這個問題:
<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
嘗試更簡單的方法,將 ProxyPass 變更https
為http
。
ProxyPass / http://1.1.1.2/
ProxyPassReverse / http://1.1.1.2/
這對於前端來說很常見(又名反向代理)如果您合理保護 1.1.1.0 網絡,則可以使用純 http 與後端對話。
您可能根本沒有在 1.1.1.2 上實作 https 伺服器...這會為您帶來您所描述的內部錯誤 50x 症狀。