nginx 1.13.8 上偶爾出現 SSL 錯誤,讓我們加密證書
我正在使用帶有附加模組 brotli 和 headers-more-nginx-module 的自編譯 nginx/1.13.8 但我的錯誤發生獨立於啟動 brotli 與否。伺服器正在執行 Debian 9。大多數情況下一切正常,但有時一個或幾個請求(例如對 css/js 資源)會導致以下錯誤。所有請求都通過 http/2 提供服務:
鉻:ERR_SPDY_PROTOCOL_ERROR
火狐:載入失敗
野生動物園:kCFErrorDomainCFNetwork 錯誤 303
edge:(同樣的錯誤,現在無法測試;稍後會更新)
我的 nginx SSL 配置(根據 ssllabs 似乎很好(A+)):
ssl_certificate "/etc/letsencrypt/live/***/fullchain.pem"; ssl_certificate_key "/etc/letsencrypt/live/***/privkey.pem"; ssl_protocols TLSv1.2; ssl_dhparam /etc/ssl/dhparam.pem; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; #raymii.org/s/tutorials/Strong_SSL_Secruity_On_nginx.html ssl_ciphers 'EECDH-AESGCM:EDH+ESGCM:AES256+EECDH:AES256+EDH'; ssl_prefer_server_ciphers on;
由於我是伺服器和伺服器管理的新手,我不知道如何調試這個問題。我所知道的是,debian repo 中的 nginx 很可能沒有發生錯誤,但我不確定。
我的猜測是它與密碼有關,因為由於我將它們從最後一個值更改為錯誤發生的頻率較低。伺服器日誌似乎很好:例如:
**MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /portal HTTP/2.0" 200 383 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" **MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /styles.a01bb74b47d88d296c44.bundle.css HTTP/2.0" 200 24238 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" **MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /inline.bfe190f13378e2257d4e.bundle.js HTTP/2.0" 200 731 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" **MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /polyfills.74b809925dee18bd9f89.bundle.js HTTP/2.0" 200 19182 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" **MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /scripts.1cd17589767e3c3fbdfe.bundle.js HTTP/2.0" 200 40807 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" **MY-IP** - - [23/Jan/2018:10:33:06 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /main.c0a6975cd3e3b14f7b2a.bundle.js HTTP/2.0" 200 0 "***" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" --> The one that failed in this case! - looks fine?
順便說一句,這發生在具有不同作業系統的不同設備上。
我想我找到了解決方案(但我不是 100% 確定!)。正如錯誤日誌所說(請參閱我在問題下的評論)在
/var/lib/nginx/proxy/**
. 當 nginx 作為“nginx”執行時,那裡的所有目錄和文件都屬於“nobody”。我將 nginx 程序的所有者更改為“nobody”,現在它可以工作了。無論如何,它怎麼能在 90% 的時間和 10% 的時間崩潰?在我看來,被拒絕的許可要麼一直受到打擊,要麼永遠不會……但有時呢?
根據被代理文件的大小,nginx 可以緩衝到磁碟。
我的猜測是失敗的文件比成功的文件大。因此,只有在那些情況下,它才會嘗試緩衝它並失敗。
您得到的不是 SSL 錯誤,而是 http/spdy 協議錯誤。很可能是因為 Content-length 標頭中設置的大小與傳輸的數量不匹配。我希望這能回答你為什麼失敗的問題。