You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2中Nginx反向代理无法通过主机名访问Docker内Rails应用

问题解决:WSL中Nginx反向代理Docker Rails站点返回502 Bad Gateway

问题分析

从你提供的Nginx错误日志,能定位两个核心问题:

  1. Server Name冲突:多个Nginx server块使用了相同的mysite1.localhost,导致其中一个配置被忽略,请求路由逻辑混乱。
  2. 连接拒绝:WSL内的Nginx无法连接到127.0.0.1:8081——虽然Windows能通过localhost:8081访问Docker站点,但WSL2的网络与Windows是隔离的,两者的localhost并非同一地址,这是关键矛盾点。

解决步骤

1. 修复Server Name冲突

  • 列出所有启用的Nginx站点配置:
    ls /etc/nginx/sites-enabled/
    
  • 逐个检查这些文件,找出所有包含server_name mysite1.localhost;的server块,删除或修改重复的配置(比如给重复块换个唯一的server_name)。
  • 验证Nginx配置合法性:
    sudo nginx -t
    
  • 重启Nginx生效:
    sudo systemctl restart nginx
    

2. 解决WSL与Windows的网络隔离问题

WSL2采用NAT网络模式,Windows的localhost和WSL的localhost是独立的。Windows能访问localhost:8081是因为Docker默认把端口绑定到了Windows的网络接口,但WSL内的Nginx访问127.0.0.1:8081时,实际访问的是WSL自身的端口,而非Windows的。

步骤1:确保Docker端口绑定范围正确

  • 在WSL终端查看容器端口映射:
    docker inspect <容器ID/名称> | grep -A 10 "Ports"
    
    确认端口绑定为0.0.0.0:8081-><容器内部端口>/tcp(而非仅绑定127.0.0.1)。如果不是,修改docker-compose.yml或启动命令:
    # docker-compose.yml示例
    ports:
      - "8081:<容器内部端口>" # 默认绑定所有网络接口(包括WSL)
    
  • 重启Docker容器后,在WSL内测试访问:
    curl http://127.0.0.1:8081
    
    能正常返回内容则说明WSL内已能访问Docker站点。

步骤2:调整Windows hosts映射

Windows访问mysite1.localhost时,需要直接指向WSL的IP,而非127.0.0.1:

  • 在WSL中获取自身IP:
    hostname -I | awk '{print $1}'
    
  • 修改Windows的C:\Windows\System32\drivers\etc\hosts文件,替换原有条目:
    <WSL_IP>   mysite1.localhost
    
    这样Windows浏览器的请求会直接发送到WSL的Nginx服务,再由Nginx转发到WSL内的Docker端口。

3. 排查防火墙限制(可选)

如果WSL内curl http://127.0.0.1:8081失败,检查UFW防火墙是否拦截了端口:

  • 查看UFW状态:
    sudo ufw status
    
  • 若开启了UFW,允许8081端口:
    sudo ufw allow 8081
    
  • 再次测试访问,正常后重启Nginx。

4. 进阶优化(可选)

如果Docker容器使用自定义网络,可以直接用容器名称作为Nginx代理目标,避免端口映射的问题:

  • 修改Nginx配置中的proxy_pass:
    proxy_pass http://<容器名称>:<容器内部端口>;
    
  • 添加Docker内置DNS解析:
    resolver 127.0.0.11 valid=30s; # Docker内置DNS地址,自动解析容器名称
    

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:36:10