一、在开启前,我们需要注意网站在3个地方的配置:
首先,我们先要确认一下Nginx的版本,Nginx版本需要在1.25.5及以上

然后,我们看一下是否开启了SSL证书,也就是HTTPS,
HTTP/3 仅在 HTTPS 下生效,需先申请并部署 SSL 证书,没有的话大家可以在配置中申请免费的Let's Encrypt

3.放行 服务器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;
}
-
修改域名:将所有的
meowtool.com替换为你的实际域名(例如example.com),注意其他文件、日志、SSL证书路径都要替换。 -
修改 PHP 版本:将
include enable-php-81.conf;中的81改为你站点实际使用的 PHP 版本(如74、80、81、82
然后保存配置 → 重启 Nginx
三、检测是否生效:

如果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;





