Nginx

在 NGINX 中啟用 HTTP2 時 NGINX / Cloudflare 隨機 520 HTTP 錯誤

  • July 18, 2021

我看到 Cloudflare 向大約 10% 的請求返回 520 HTTP 錯誤程式碼的問題。但是,如果我繞過 Cloudflare 代理並直接從伺服器請求,則不會出現此問題。

經過大量故障排除後,我發現如果我在http2之後刪除兩個參數listen,那麼問題就會消失,Cloudflare 停止返回 520 錯誤。

server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   ssl_certificate         *path to key*;
   ssl_certificate_key     *path to key*;
   server_name example.com;
   root *path to directory*;
   location / {
       proxy_pass         http://localhost:5000; // proxying asp.net core app
       proxy_http_version 1.1;
       proxy_set_header   Upgrade $http_upgrade;
       proxy_set_header   Connection keep-alive;
       proxy_set_header   Host $host;
       proxy_cache_bypass $http_upgrade;
       proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header   X-Forwarded-Proto $scheme;
   }
}

是否有解決問題的方法可以讓我保留 HTTP2 功能?

簡單的解釋是,根據了解 Cloudflare HTTP/2 和 HTTP/3 支持

Cloudflare 僅在源 Web 伺服器和 Cloudflare 之間使用 HTTP/1.x。

您可以在源伺服器上禁用 HTTP/2,但仍然可以在瀏覽器和 Cloudflare 之間受益,因為如果您在 Cloudflare 的邊緣網路上具有 TLS,它會預設啟用。

引用自:https://serverfault.com/questions/1069943