AWS EC2子域api.mydomain.com映射后端3010端口失败求助
问题排查与解决方案
1. 先确认DNS解析正确性
首先验证子域api.mydomain.com是否已正确指向EC2实例IP(1.2.33.44):
- 在本地终端执行命令:
nslookup api.mydomain.com # 或 dig api.mydomain.com - 如果返回的IP不是1.2.33.44,先到域名服务商后台添加/更新A记录,将
api子域指向该IP。
2. 检查Nginx配置文件(mydomain.conf)
核心问题大概率出在Nginx的server块匹配逻辑,需确保主域和子域有独立的配置块,且子域的proxy_pass指向后端3010端口。
正确配置示例:
# 主域指向React前端(3000端口) server { listen 80; server_name mydomain.com www.mydomain.com; location / { # 若前端是Docker容器,替换为容器名+端口(如http://react-app:3000) proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # 子域指向NestJS后端(3010端口) server { listen 80; server_name api.mydomain.com; location / { # 若后端是Docker容器,替换为容器名+端口(如http://nest-app:3010) proxy_pass http://localhost:3010; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 适配后端API的额外配置 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
3. 验证Docker网络与端口映射
如果前端/后端都是Docker容器,需确保:
- Nginx容器与后端容器在同一Docker网络中(通过
docker-compose.yaml的networks配置) - proxy_pass地址使用容器名+端口而非
localhost(localhost在Nginx容器内指向容器自身,而非宿主机)
示例docker-compose.yaml配置片段:
version: '3.8' services: react-app: build: ./frontend ports: - "3000:3000" networks: - app-network nest-app: build: ./backend ports: - "3010:3010" networks: - app-network nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./mydomain.conf:/etc/nginx/conf.d/mydomain.conf networks: - app-network depends_on: - react-app - nest-app networks: app-network: driver: bridge
4. 重载Nginx配置并验证
- 进入Nginx容器,检查配置语法:
nginx -t - 若语法无错误,重载配置:
nginx -s reload
5. 排除缓存与安全组问题
- 清除浏览器缓存,用隐私模式访问
api.mydomain.com测试 - 检查EC2安全组:确保入站规则允许80(HTTP)/443(HTTPS)端口的公网流量,后端3010端口无需开放公网(Nginx通过内部网络代理访问)
内容的提问来源于stack exchange,提问作者Shubham Verma
相关产品推荐
相关产品推荐

