我发现一个问题,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 功能?
答案1
简单的解释是,根据了解 Cloudflare HTTP/2 和 HTTP/3 支持:
Cloudflare 仅在原始 Web 服务器和 Cloudflare 之间使用 HTTP/1.x。
您可以在原始服务器上禁用 HTTP/2,但仍然可以在浏览器和 Cloudflare 之间受益,因为如果您在 Cloudflare 的边缘网络中拥有 TLS,它会默认启用。