DigitalOcean部署Django等服务后多URL访问异常求助
问题排查与修复方案
针对你遇到的不同访问异常,逐个分析原因并给出修复步骤:
1. 直接访问<IP>(80端口)返回404
这是因为Nginx配置中没有匹配裸IP请求的规则,或默认server块未配置反向代理到Django服务。
- 修复步骤:
- 打开Nginx站点配置文件(通常位于
/etc/nginx/sites-available/目录下) - 给裸IP添加对应server块,或修改默认server块(
listen 80 default_server;)配置反向代理:server { listen 80 default_server; server_name <你的服务器IP>; location / { proxy_pass http://127.0.0.1:8000; # 对应Django/WSGI服务监听的端口或socket proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - 重启Nginx生效:
sudo systemctl restart nginx
- 打开Nginx站点配置文件(通常位于
2. https://DomainName能显示HTML但静态文件加载失败
核心问题是Nginx未正确处理静态文件请求,或Django静态文件未完成收集配置。
- 先确认Django配置:
- 确保
settings.py中已设置:STATIC_ROOT = '/var/www/你的项目名/static' # 自定义静态文件存放目录 STATIC_URL = '/static/' - 运行命令收集静态文件:
python manage.py collectstatic
- 确保
- 再修改Nginx对应域名的server块,添加静态文件处理规则:
server { listen 443 ssl; server_name DomainName; # 已有的SSL证书配置保持不变 location /static/ { root /var/www/你的项目名; # 指向STATIC_ROOT的上级目录 expires 30d; # 开启静态文件缓存 } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - 确保Nginx有静态文件目录的读取权限:
sudo chown -R www-data:www-data /var/www/你的项目名/static - 重启Nginx和Django服务
3. https://www.DomainName返回404
这是因为Nginx未配置www子域名的server块,或现有server块的server_name未包含www.DomainName。
- 修复方案二选一:
方案1:将www子域名加入现有主域名的server块:
方案2:配置www子域名重定向到主域名(更推荐,避免重复内容):server { listen 443 ssl; server_name DomainName www.DomainName; # 同时匹配主域名和www子域名 # 其他SSL、反向代理、静态文件配置保持不变 }server { listen 443 ssl; server_name www.DomainName; # 配置对应www域名的SSL证书 return 301 https://DomainName$request_uri; } - 重启Nginx生效
额外检查项
- 确认gunicorn(或你使用的WSGI服务器)正常运行,监听地址/端口与Nginx的
proxy_pass配置一致 - 检查防火墙规则,确保80、443端口开放:
sudo ufw allow 80/tcp && sudo ufw allow 443/tcp - 若用Certbot申请SSL证书,需确认其自动生成的配置包含了你需要的域名(包括www)
内容的提问来源于stack exchange,提问作者Michael Joseph
相关产品推荐
相关产品推荐

