
我有一個矩陣家庭伺服器和一個 Django Web 應用程式分別位於192.168.81
和 的虛擬機器上192.168.83
。家庭伺服器是用矩陣 docker-ansible-部署並在 nginx 上運行。它透過以下方式取得和更新 SSL 憑證特拉菲克和我們來加密一下。
該 Web 應用程式使用自己的 Let's Encrypt 憑證。雖然我可以並且已經讓它們獨立工作,但我很難讓它們在相同的 80 和 443 端口上一起工作。
在 Web 應用程式端設定反向代理以將流量從其網域轉移後,如下所示:
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/mysite.org/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.org/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mysite.org/fullchain.pem
# Enable SSL Proxy Engine
SSLProxyEngine On
ProxyPass / https://192.168.1.83/
ProxyPassReverse / https://192.168.1.83/
我得到:
[Wed Jan 17 07:13:21.567813 2024] [core:notice] [pid 33994:tid 125031783462784] AH00094: Command line: '/usr/sbin/apache2'
[Wed Jan 17 07:15:23.409061 2024] [proxy:error] [pid 34272:tid 125031640188608] (20014)Internal error (specific information not available): [client 192.168.1.85:44054] AH01084: pass request body failed to 192.168.1.83:443 (192.168.1.83)
[Wed Jan 17 07:15:23.409180 2024] [proxy:error] [pid 34272:tid 125031640188608] [client 192.168.1.85:44054] AH00898: Error during SSL Handshake with remote server returned by /
[Wed Jan 17 07:15:23.409209 2024] [proxy_http:error] [pid 34272:tid 125031640188608] [client 192.168.1.85:44054] AH01097: pass request body failed to 192.168.1.83:443 (192.168.1.83) from 192.168.1.85 ()
[Wed Jan 17 07:15:23.715825 2024] [proxy:error] [pid 34273:tid 125031648581312] (20014)Internal error (specific information not available): [client 192.168.1.85:44070] AH01084: pass request body failed to 192.168.1.83:443 (192.168.1.83), referer: https://192.168.1.83/
[Wed Jan 17 07:15:23.715945 2024] [proxy:error] [pid 34273:tid 125031648581312] [client 192.168.1.85:44070] AH00898: Error during SSL Handshake with remote server returned by /favicon.ico, referer: https://192.168.1.83/
[Wed Jan 17 07:15:23.715970 2024] [proxy_http:error] [pid 34273:tid 125031648581312] [client 192.168.1.85:44070] AH01097: pass request body failed to 192.168.1.83:443 (192.168.1.83) from 192.168.1.85 (), referer: https://192.168.1.83/
更新:
由於在同一連接埠上運行兩個伺服器幾乎肯定會弄亂 SSL 認證(除非我們希望它們共享相同的憑證並在單獨的伺服器上使用反向代理將流量從單獨的網域重定向到各自的內部伺服器) ,我想使用 80 和 443 以外的端口託管我的網頁應用程式。
我該怎麼做呢?
答案1
這是因為後端提供的 SSL/TLS 證書 192.168.1.83:443 無效,因為對於有效證書,您始終需要網域名稱。
我相信如果你在哪裡打開https://192.168.1.83/在瀏覽器中(當然,IP 192.168.1.83 是可存取的),您會收到「連線不安全」警告。
您的選擇是(大致按難度順序排列):
- 盲目信任後端網絡,僅在正向代理上使用 SSL,透過純 http 連接到後端。如果您的 apache 轉送代理程式與這些虛擬機在同一台電腦上執行,並且您同時控制轉送代理程式和虛擬機,那麼我會這樣做。
- 不信任後端網路並在前端和後端都進行加密,那麼您需要
- 使用憑證有效的網域連接到後端(可能在主機檔案中配置該網域的 IP),確保憑證本身有效且更新
- 在 apache 設定中明確設定此連線的憑證信任
- 為後端服務設定您自己的 CA,並將其配置為在轉發代理上受信任(但請注意,一旦處理您自己的 CA,您很容易陷入危險區域!)
- 我不建議在未正確驗證憑證(例如停用
SSLProxy*
選項)的情況下將轉送代理配置為透過 SSL 連接,而是在後端網路受信任時選擇選項 1,如果不信任則選擇上述三種方法之一。
- 僅在後端加密並使用 SNI 負載平衡代替 Apache 轉發代理將 https 流量轉發到後端而不重新加密(在我看來,這是比選項 1 更高級的設置,我不知道 apache 是否適合對於此應用程式).