子域名指向错误网站目录求助:Linux多站点配置异常
我有一台运行多个不同域名网站的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; } }
排查与解决步骤
检查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验证Nginx配置语法
避免配置错误导致Nginx fallback到默认站点:sudo nginx -t如果有错误,根据提示修正配置文件后再重启Nginx。
检查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确认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检查DNS解析与缓存
确认demo.mywebsitedomain.com解析到正确的服务器IP,本地测试可执行:nslookup demo.mywebsitedomain.com清除本地浏览器缓存或使用无痕模式访问,避免缓存的旧站点内容干扰。
排查Nginx默认站点冲突
如果以上步骤都没问题,检查是否有其他Nginx配置(比如默认的default站点)的server_name包含泛域名或为空,导致Nginx将未匹配的请求转发到默认站点。可禁用默认站点:sudo unlink /etc/nginx/sites-enabled/default sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者tiberhockey

