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

子域名指向错误网站目录求助:Linux多站点配置异常

子域名访问跳转到错误Django应用的排查与解决

我有一台运行多个不同域名网站的Linux服务器,此前所有站点运行正常。但为其中一个域名创建子域名demo.mywebsitedomain.com后,按独立域名方式配置了专属的Nginx Socket、Systemd Service及Nginx配置文件,访问该子域名时却打开了另一个Django应用的站点,而非配置中指向的testdemo目录下的应用。

已创建的配置文件

1. Systemd Socket配置 (/etc/systemd/system/testdemo.socket)

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/testdemo.sock

Environment="PATH=/usr/bin:/home/tiber/testdemo/env/bin"

[Install]
WantedBy=sockets.target

2. Systemd Service配置 (/etc/systemd/system/testdemo.service)

[Unit]
Description=gunicorn daemon
Requires=testdemo.socket
After=network.target

[Service]
User=tiber
Group=www-data
WorkingDirectory=/home/tiber/testdemo
ExecStart=/home/tiber/testdemo/env/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/testdemo.sock \
          mysite.wsgi:application

[Install]
WantedBy=multi-user.target

3. Nginx站点配置 (/etc/nginx/sites-available/testdemo)

server {
    listen 80;
    server_name demo.mywebsitedomain.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/testdemo;
    }

    location /media/ {
        root /var/www/testdemo;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/testdemo.sock;
    }
}

排查与解决步骤

  1. 检查Nginx站点是否启用
    执行命令确认配置已软链接到sites-enabled目录:

    ls -l /etc/nginx/sites-enabled/
    

    如果没有testdemo的链接,创建它:

    sudo ln -s /etc/nginx/sites-available/testdemo /etc/nginx/sites-enabled/
    

    然后重启Nginx:

    sudo systemctl restart nginx
    
  2. 验证Nginx配置语法
    避免配置错误导致Nginx fallback到默认站点:

    sudo nginx -t
    

    如果有错误,根据提示修正配置文件后再重启Nginx。

  3. 检查Systemd服务状态
    确认testdemo.socket和testdemo.service是否正常运行:

    sudo systemctl status testdemo.socket
    sudo systemctl status testdemo.service
    

    如果未启动,启用并启动服务:

    sudo systemctl enable --now testdemo.socket
    sudo systemctl start testdemo.service
    

    查看服务日志排查启动失败原因:

    sudo journalctl -u testdemo.service -f
    
  4. 确认Socket文件权限
    检查/run/testdemo.sock的权限是否允许Nginx访问:

    ls -l /run/testdemo.sock
    

    确保所属用户/组包含www-data,如果权限不对,可在testdemo.service的[Service]段添加UMask=0007配置,然后重启服务:

    sudo systemctl daemon-reload
    sudo systemctl restart testdemo.service
    
  5. 检查DNS解析与缓存
    确认demo.mywebsitedomain.com解析到正确的服务器IP,本地测试可执行:

    nslookup demo.mywebsitedomain.com
    

    清除本地浏览器缓存或使用无痕模式访问,避免缓存的旧站点内容干扰。

  6. 排查Nginx默认站点冲突
    如果以上步骤都没问题,检查是否有其他Nginx配置(比如默认的default站点)的server_name包含泛域名或为空,导致Nginx将未匹配的请求转发到默认站点。可禁用默认站点:

    sudo unlink /etc/nginx/sites-enabled/default
    sudo systemctl restart nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:05:12