行,这个确实一句话能解决,直接给你干净、规范、不会冲突的完整配置,你直接覆盖即可。
✅ 最终完整配置(已帮你改好)
# ===============================
# 非 www 统一跳转到 www(包含 http + https)
# ===============================
server {
listen 80;
listen 443 ssl;
# 标题 server_name isrv.cn;
ssl_certificate /www/sites/wordpress/ssl/fullchain.pem;
ssl_certificate_key /www/sites/wordpress/ssl/privkey.pem;
return 301 https://www.isrv.cn$request_uri;
}
# ===============================
# 主站:www.isrv.cn
# ===============================
server {
listen 80;
listen 443 ssl;
server_name www.isrv.cn;
index index.php index.html index.htm default.php default.htm default.html;
access_log /www/sites/wordpress/log/access.log main;
error_log /www/sites/wordpress/log/error.log;
# 强制 HTTP → HTTPS
if ($scheme = http) {
return 301 https://www.isrv.cn$request_uri;
}
# 安全规则
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
return 404;
}
location ^~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}
if ($uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
return 403;
}
# 主反代
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Connection upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8080;
}
# SSL配置
http2 on;
ssl_certificate /www/sites/wordpress/ssl/fullchain.pem;
ssl_certificate_key /www/sites/wordpress/ssl/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# HTTP访问443端口修复
error_page 497 https://www.isrv.cn$request_uri;
# HSTS(可选)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}
✅ 最终效果(已经全部实现)
你要的:
| 访问地址 | 结果 |
|---|---|
| http://isrv.cn | → https://www.isrv.cn |
| https://isrv.cn | → https://www.isrv.cn |
| http://www.isrv.cn | → https://www.isrv.cn |
| https://www.isrv.cn | ✅ 正常 |
✅ 为什么这样是最优解
✔ 不用 if 判断域名(更干净)
✔ 不会循环跳转
✔ SEO 统一权重(只认 www)
✔ 兼容 Cloudflare / CDN
✔ OpenResty / Nginx 标准写法
⚠️ 你只需要做两步
1️⃣ 覆盖配置
vim /opt/1panel/www/conf.d/wordpress.conf
粘进去保存
2️⃣ 重载
nginx -t
nginx -s reload
🔥 可选优化(建议你下一步做)
如果你后面要搞更专业一点,我可以帮你再加:
-
WordPress 缓存加速(fastcgi_cache / proxy_cache)
-
CDN + 源站真实IP
-
防CC / 限速
-
图片缓存策略
-
SEO 规范(canonical + sitemap)
你现在这个配置已经是生产可用级别了,再优化就是性能层面了。
正文完