通过宝塔面板开启网站HTTP/3的方法(Nginx教程)

一、在开启前,我们需要注意网站在3个地方的配置:

1.注意Nginx的版本

首先,我们先要确认一下Nginx的版本,Nginx版本需要在1.25.5及以上

查看Nginx版本

2.需要部署SSL证书

然后,我们看一下是否开启了SSL证书,也就是HTTPS,

HTTP/3 仅在 HTTPS 下生效,需先申请并部署 SSL 证书,没有的话大家可以在配置中申请免费的Let's Encrypt证书

检测部署SSL证书

3.放行 服务器UDP 443 端口

在宝塔面板->安全->添加端口规则 选项中添加UDP 443

宝塔面板放行UDP443

在云服务后台,添加UDP 443

云服务后台添加UDP 443

二、修改站点 Nginx 配置:

进入宝塔面板 → 网站 → 你的站点 → 设置 → 配置文件

在设置前,强烈建议大家先把文件复制下来进行备份,如果出现问题好还原

将以下我已配置好的文件复制进去:这是一个IPV4的版本:

server {
    # ---------- 基础监听 ----------
    listen 80;
    listen 443 ssl ;               # IPv4 HTTPS + HTTP/2
    http2 on;
    listen 443 quic reuseport;           # IPv4 QUIC (HTTP/3) - 仅第一个站点加 reuseport

    # ---------- 站点信息 ----------
    server_name meowtool.com www.meowtool.com;
    root /www/wwwroot/meowtool.com;
    index index.php index.html index.htm default.php default.htm default.html;

    # ---------- SSL 证书 ----------
    ssl_certificate    /www/server/panel/vhost/cert/meowtool.com/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/meowtool.com/privkey.pem;

    # ---------- SSL 协议与优化 ----------
    ssl_protocols TLSv1.2 TLSv1.3;               # 修改为同时兼容 TLSv1.2
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets on;
    ssl_early_data on;                    # 0-RTT(HTTP/3 优化)

    # ---------- HTTP/3 关键配置 ----------
    http3 on;                              # 启用 HTTP/3
    add_header Alt-Svc 'h3=":443"; ma=86400; persist=1';  # 通知浏览器支持 HTTP/3

    # ---------- 强制 HTTPS 跳转(宝塔自动生成,请勿修改)----------
    set $isRedcert 1;
    if ($server_port != 443) {
        set $isRedcert 2;
    }
    if ( $uri ~ /\.well-known/ ) {
        set $isRedcert 1;
    }
    if ($isRedcert != 1) {
        rewrite ^(/.*)$ https://$host$1 permanent;
    }

    # ---------- 安全增强 ----------
    add_header Strict-Transport-Security "max-age=315360000" always;  # HSTS 启用(可选)
    error_page 497  https://$host$request_uri;                        # 处理 HTTP 请求到 HTTPS 端口

    # ---------- 静态文件缓存 ----------
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires 30d;
        access_log off;
    }
    location ~ .*\.(js|css)?$ {
        expires 12h;
        access_log off;
    }

    # ---------- 敏感文件和目录保护(防止泄露)----------
    location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ {
        return 404;
    }
    location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties))$
    {
        return 404;
    }

    # ---------- Let's Encrypt 验证目录放行 ----------
    location ~ \.well-known {
        allow all;
    }
    # 禁止在验证目录放入危险脚本
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    # ---------- PHP 解析----------
    include enable-php-81.conf;   # 根据你的 PHP 版本修改(如 enable-php-74.conf)

    # ---------- 其他包含文件----------
    include /www/server/panel/vhost/nginx/well-known/meowtool.com.conf;
    include /www/server/panel/vhost/nginx/extension/meowtool.com/*.conf;
    include /www/server/panel/vhost/rewrite/meowtool.com.conf;

    # ---------- 日志 ----------
    access_log  /www/wwwlogs/meowtool.com.log;
    error_log   /www/wwwlogs/meowtool.com.error.log;
}

文件中有些信息需要根据你的网站进行修改:

  1. 修改域名将所有的 meowtool.com 替换为你的实际域名(例如 example.com),注意其他文件、日志、SSL证书路径都要替换。

  2. 修改 PHP 版本:将 include enable-php-81.conf; 中的 81 改为你站点实际使用的 PHP 版本(如 74808182 等)。如果不确定,可以在宝塔站点设置中查看。

然后保存配置 → 重启 Nginx

三、检测是否生效:

通过 https://http3check.net/ 检测是否生效即可完成 HTTP/3配置

检测是否生效

补充说明

如果WordPress中出现 Warning: Undefined array key "HTTP_HOST"  的报错

 

这是由于Nginx上开启了HTTP/3,没有正确传递 Host 头部导致的问题

简单来说,这是因为新旧协议处理域名的方式不同:

  • HTTP/1.1 和 HTTP/2:使用请求头中的 Host 字段来传递域名信息 。

  • HTTP/3:为了提升效率,改用 :authority 伪头部来传递相同的信息,不再包含传统的 Host 头 。

 

Nginx 默认的 FastCGI 配置参数 fastcgi_param HTTP_HOST $http_host; 会尝试从请求的 Host 头中取值传给 PHP。但在 HTTP/3 请求中,这个头不存在,所以 PHP 里的 $_SERVER['HTTP_HOST'] 就变成了 ,导致 WordPress 报错 。

 

在/www/server/nginx/conf/fastcgi.conf 的尾部添加

fastcgi_param HTTP_HOST $host; 

便可解决问题

fastcgi.conf尾部添加信息

上一篇 想聊聊AI搜索快速发展的当下,传统SEO以后怎么办?
下一篇 推荐5个Chrome浏览器扩展商店,增加你的浏览器体验