NGINX配置问题:一个域名可用,另一个无法正常响应
问题
两个域名domain1.site和domain2.site,前者运行正常,后者访问时返回默认的“Welcome to Nginx!”页面,而非预期的Flask应用内容。
domain1.site的NGINX配置
server { listen 80; server_name domain1.site www.domain1.site; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name domain1.site www.domain1.site; ssl_certificate /etc/letsencrypt/live/domain1.site/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain1.site/privkey.pem; location / { proxy_pass http://127.0.0.1:8222; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
domain2.site的NGINX配置
server { listen 80; server_name domain2.site www.domain2.site; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name domain2.site www.domain2.site; ssl_certificate /etc/letsencrypt/live/domain2.site/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain2.site/privkey.pem; location / { proxy_pass http://127.0.0.1:3222; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
已知信息:
- 网站基于Python Flask开发,通过Gunicorn启动,Flask与Gunicorn配置的端口均与NGINX配置一致(domain2对应3222端口)
- 已尝试禁用domain2.site的SSL,问题依旧
- DNS记录已验证指向正确服务器IP
排查与解决步骤
1. 确认domain2的NGINX配置已加载生效
- 执行
nginx -t检查配置语法,确保无报错 - 执行
nginx -s reload重新加载配置 - 检查
/etc/nginx/sites-enabled/目录,确认domain2的配置文件已被软链接到该目录,未被注释或遗漏
2. 验证3222端口的Gunicorn服务状态
- 执行
ss -tulpn | grep 3222,确认Gunicorn进程正在监听3222端口 - 在服务器本地执行
curl http://127.0.0.1:3222,检查是否返回预期的Flask页面内容。若请求失败或无响应,说明Gunicorn服务未正常启动,需查看Gunicorn日志定位问题
3. 检查NGINX默认服务器配置
返回默认页面通常是请求被NGINX的默认服务器接管导致:
- 查看
/etc/nginx/nginx.conf或/etc/nginx/sites-available/default,确认是否存在带有default_server标记的server块(如listen 80 default_server) - 临时在domain2的
server块中添加default_server参数(仅测试用),重新加载配置后访问,验证是否能匹配到正确的服务器块
4. 查看NGINX日志定位问题
- 过滤domain2的请求日志:
日志会显示请求被哪个grep domain2.site /var/log/nginx/access.log grep domain2.site /var/log/nginx/error.logserver块处理,以及是否存在代理错误、证书异常等问题
5. 验证域名匹配规则
- 检查
server_name配置是否存在拼写错误,确保与访问的域名完全一致(包括www前缀) - 若使用通配符或正则表达式,确认规则是否准确匹配目标域名
6. 临时跳过HTTPS跳转测试
修改domain2的80端口server块,直接代理到3222端口:
server { listen 80; server_name domain2.site www.domain2.site; location / { proxy_pass http://127.0.0.1:3222; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
重新加载NGINX后访问http://domain2.site,排除301跳转或SSL配置的影响
内容的提问来源于stack exchange,提问作者overklassniy
相关产品推荐
相关产品推荐

