Nginx子域名配置异常:访问子域名跳转至主域名根目录
问题分析与解决方案
你配置了子域名panel.example.com,但访问时显示主域名example.com的/var/www/wordpress目录内容,而非预期的/var/www/panel,核心问题可能出在DNS解析、Nginx配置重载或HTTPS匹配上,以下是具体修复步骤:
1. 修正Cloudflare DNS记录
你提到在Cloudflare添加的是名称为Blog的A记录,但子域名是panel.example.com,这会导致DNS无法正确解析panel.example.com到你的服务器。需要在Cloudflare后台添加:
- 类型:A
- 名称:
panel - 内容:你的服务器IP
添加后等待DNS生效(通常几分钟到几小时)。
2. 重载Nginx配置
修改Nginx配置文件后,必须让服务加载新配置,执行以下命令:
sudo nginx -t && sudo systemctl reload nginx
nginx -t会先检查配置语法是否正确,避免重载后服务崩溃。
3. 处理HTTPS访问场景
如果你用https://panel.example.com访问,当前子域名仅配置了80端口(HTTP),Nginx找不到对应的443(HTTPS)server块时,会匹配到主域名的443配置(因为是第一个加载的HTTPS server),导致显示主域名内容。需要给子域名添加HTTPS配置:
方法1:添加443 server块
server { listen 443 ssl; listen [::]:443 ssl; server_name panel.example.com www.panel.example.com; # 替换为你的SSL证书和密钥路径,可通过Certbot免费申请 ssl_certificate /etc/ssl/panel.example.com.pem; ssl_certificate_key /etc/ssl/panel.example.com.key; root /var/www/panel; index index.php index.html index.nginx-debian.html; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } }
方法2:强制HTTP跳转至HTTPS(可选)
在子域名的80端口server块末尾添加跳转规则:
return 301 https://$server_name$request_uri;
4. 验证Nginx配置加载情况
执行nginx -T查看所有已加载的Nginx配置,确认panel.example.com的server块存在且无语法错误。
内容的提问来源于stack exchange,提问作者Azella Xint
相关产品推荐
相关产品推荐

