You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Route 53+Nginx配置HTTP转HTTPS及WWW转非WWW遇ERR_HTTP2_PROTOCOL_ERROR

问题排查与修复方案

核心问题分析

  • $server_name变量误用:80端口重定向使用$server_name会导致访问www.example.com时跳转到https://www.example.com,后续HTTPS请求若遇到HTTP/2兼容性问题或证书不匹配,就会触发ERR_HTTP2_PROTOCOL_ERROR。
  • HTTP/2兼容性限制:部分浏览器对HTTP/2的配置要求更严格,SSL参数、头部设置不当会直接导致协议错误。
  • 浏览器缓存残留:之前错误的301重定向会被浏览器持久缓存,导致非Firefox浏览器无法正常加载。

修复步骤

1. 修正Nginx重定向逻辑

将80端口的重定向目标改为固定的非WWW域名,确保所有HTTP流量统一跳转到https://example.com:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    # 直接指定跳转目标,避免$server_name带来的不确定性
    return 301 https://example.com$request_uri;
}

2. 拆分HTTPS服务器块(优化配置)

将非WWW和WWW的HTTPS请求分开处理,明确对WWW域名做301重定向,避免依赖Route53别名可能带来的解析延迟:

# 处理WWW域名的HTTPS请求,直接跳转到非WWW
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.example.com;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;
    return 301 https://example.com$request_uri;
}

# 处理非WWW域名的HTTPS请求
server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name example.com;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;
    large_client_header_buffers 4 32k;

    root /var/www/mydomain;
    index index.php;
}

3. 检查SSL证书与参数

  • 确认ssl-example.com.conf中的证书是包含example.com和www.example.com的SAN证书,单域名证书会导致HTTPS访问WWW时触发证书错误,进而引发HTTP/2协议问题。
  • 优化ssl-params.conf中的加密套件配置,保证兼容主流浏览器:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

4. 清除浏览器缓存

  • Chrome/Edge等浏览器:按Ctrl+Shift+Delete清除“缓存的图片和文件”,再前往chrome://net-internals/#hsts删除对应域名的HSTS记录。
  • 测试时优先使用隐私模式(Incognito/Private Window)绕过本地缓存,验证配置是否生效。

5. 验证Route53解析

使用命令行工具检查域名解析结果:

dig example.com A
dig example.com AAAA
dig www.example.com A
dig www.example.com AAAA

确保WWW域名的A/AAAA记录正确指向非WWW域名的解析值,可临时将TTL改为300秒加快解析生效速度。

测试流程

  1. 重启Nginx服务:sudo systemctl restart nginx
  2. 用curl验证重定向逻辑:
curl -I http://example.com
curl -I http://www.example.com
curl -I https://www.example.com

确认所有请求最终都跳转到https://example.com,返回状态码为301或200。
3. 用不同浏览器的隐私模式访问网站,确认ERR_HTTP2_PROTOCOL_ERROR不再出现。

内容的提问来源于stack exchange,提问作者JoaMika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:15:19