无法配置Nginx反向代理:Docker环境下API域名映射失效求助
问题排查与解决方案
1. 检查端口占用状态
先确认服务器的80端口是否被Nginx正常监听,避免被其他进程抢占。执行以下命令:
sudo netstat -tulpn | grep :80
如果输出中没有nginx相关进程,说明80端口被其他程序占用,或者Nginx未正常启动。
2. 验证域名解析正确性
确保api.versite.online和versite.online已正确指向你的服务器公网IP。在本地终端执行:
nslookup api.versite.online nslookup versite.online
若返回IP不是你的服务器地址,说明域名解析配置有误,需先修正DNS记录。
3. 开放防火墙/安全组80端口
服务器防火墙或云服务商安全组必须放行80端口,否则请求无法到达Nginx:
- 若使用ufw防火墙:
sudo ufw allow 80/tcp sudo ufw reload
- 若使用firewalld防火墙:
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --reload
4. 补全前端站点的Nginx配置
你仅配置了API站点,还需添加前端站点versite.online的server块。假设前端项目文件存放在/var/www/versite-frontend,配置示例如下:
server { listen 80; server_name versite.online; access_log /var/log/nginx/versite.access.log; root /var/www/versite-frontend; index index.html index.htm; # 单页应用需添加此规则,避免页面刷新出现404 location / { try_files $uri $uri/ /index.html; } }
将上述内容保存到/etc/nginx/sites-available/versite.online,然后创建软链接到启用目录:
sudo ln -s /etc/nginx/sites-available/versite.online /etc/nginx/sites-enabled/
最后测试配置并重启Nginx:
sudo nginx -t sudo systemctl reload nginx
5. 检查Docker容器网络配置
若Docker使用默认bridge模式,localhost:8080可访问容器,但如果是其他网络模式,需调整proxy_pass地址。先获取容器IP:
docker inspect <你的容器ID> | grep "IPAddress"
将API配置中的proxy_pass http://localhost:8080替换为http://<容器IP>:8080,再重启Nginx测试。
6. 查看Nginx错误日志
访问日志为空可能是请求未到达Nginx,或处理时出错。查看错误日志定位问题:
sudo tail -f /var/log/nginx/error.log
内容的提问来源于stack exchange,提问作者mlutsiuk
相关产品推荐
相关产品推荐

