Django项目可通过Droplet IP访问但自定义域名无法访问求助
排查Django+Gunicorn+Nginx部署域名无法访问问题
1. 匹配Gunicorn运行模式与Nginx配置
你之前启动Gunicorn用的是TCP端口(-b 0.0.0.0:8000),但Nginx配置指向的是Unix Socket(http://unix:/run/gunicorn.sock),两者不兼容。需修改Gunicorn启动命令为Socket模式:
gunicorn -w 2 -b unix:/run/gunicorn.sock --chdir /home/USER_NAME/projectdir/test_project test_project.wsgi
如果用systemd管理Gunicorn,同步修改service文件中的ExecStart参数,确保服务始终以Socket模式启动。
2. 检查Unix Socket权限
Nginx默认以www-data用户运行,需确保/run/gunicorn.sock的权限允许Nginx读写:
# 查看Socket当前权限 ls -l /run/gunicorn.sock # 方法1:启动Gunicorn时指定用户组(推荐) gunicorn -w 2 -b unix:/run/gunicorn.sock --user www-data --group www-data --chdir /home/USER_NAME/projectdir/test_project test_project.wsgi # 方法2:临时调整Socket权限(重启Gunicorn后会重置) chmod 777 /run/gunicorn.sock
3. 验证Nginx配置正确性
检查配置语法并重启服务:
# 检测配置语法错误 nginx -t # 重启Nginx生效配置 systemctl restart nginx
若提示错误,根据输出修正配置(如路径拼写、server_name是否替换为实际域名/IP)。
4. 检查防火墙规则
- DigitalOcean Droplet防火墙:确认已开启
HTTP (80)端口的入站规则,允许所有来源访问。 - 系统防火墙(如ufw):检查并开放80端口:
ufw status # 未开放则添加规则 ufw allow 80/tcp ufw reload
5. 确认域名解析正确性
在本地终端执行命令,验证域名A记录指向你的Droplet IP:
dig DOMAIN_NAME +short dig www.DOMAIN_NAME +short
输出需与Droplet公网IP完全一致。
6. 通过日志定位错误
查看Nginx和Gunicorn日志获取具体错误信息:
# Nginx错误日志 tail -f /var/log/nginx/error.log # Nginx访问日志 tail -f /var/log/nginx/access.log # Gunicorn日志(systemd管理时) journalctl -u gunicorn.service -f
内容的提问来源于stack exchange,提问作者Aryaan
相关产品推荐
相关产品推荐

