AWS部署Django服务器,Nginx HTTP转HTTPS后DNS连接被拒
问题排查与修复方案
1. 修正Nginx配置中的域名占位符错误
你的Nginx配置里直接把host作为字面量使用,Nginx不会将其解析为实际域名,导致重定向到https://host/xxx这种无效地址,这就是DNS连接拒绝错误的核心原因。必须把配置里的host替换成实际的旧域名:
修改后的HTTP重定向server块:
server { listen 80; server_name 你的旧域名; # 替换为实际域名,比如 old-fantasy.com return 301 https://$server_name$request_uri; # 用$server_name变量自动复用上面的域名,避免重复书写 # 注意:return语句会直接终止请求处理,下方的location块不会执行,可以直接删除 }
2. 补全HTTPS服务的Nginx配置
重定向后的HTTPS请求需要对应的server块处理,否则即使重定向成功,HTTPS也无法正常访问。示例配置如下:
server { listen 443 ssl; server_name 你的旧域名; # 配置SSL证书路径(AWS上可使用Certbot生成免费证书,或AWS ACM证书) ssl_certificate /path/to/your/ssl-cert.pem; ssl_certificate_key /path/to/your/ssl-privkey.pem; # 静态文件与Django代理配置移到此处 location = /favicon.ico { access_log off; log_not_found off; } location /staticfiles/ { alias /home/ubuntu/Filmes/staticfiles/; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }
3. 验证基础环境配置
- 确认旧域名的DNS记录(A/AAAA类型)已正确指向AWS服务器的公网IP
- 检查AWS安全组是否开放80(HTTP)和443(HTTPS)端口,允许外部IP访问
- 修改配置后重启Nginx生效:
sudo systemctl restart nginx
测试建议
用curl -I http://你的旧域名命令查看重定向响应,确认返回的Location地址是有效的HTTPS域名,而非错误的https://host。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

