docker nginx 反向代理 go 端口 反向不通,反向其它可以! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coderabbit
V2EX    NGINX

docker nginx 反向代理 go 端口 反向不通,反向其它可以!

  •  
  •   coderabbit 2019-09-26 21:23:01 +08:00 5470 次点击
    这是一个创建于 2285 天前的主题,其中的信息可能已经有所发展或是发生改变。

    docker 子网

    172.100.0.0/24 

    本地宿主机 ip

    //我不确定 172.100.0.1 

    go 本地服务及端口

    127.0.0.1:9606 

    本地域名

    www.demo.cn 

    nginx 反向代理

    location ~ ^(/static|/service) { proxy_redirect off ; proxy_set_header Host $host; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 256k; proxy_connect_timeout 30; proxy_send_timeout 30; proxy_read_timeout 60; proxy_buffer_size 256k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_max_temp_file_size 128m; proxy_pass http://172.100.0.1:9606$request_uri; } 

    目前遇到的问题就是这样的,我想访问 www.demo.cn/static 转发到 go 服务。一直转发不过去 我输入

    www.demo.cn/static/ 直接显示 404 Not Found nginx/1.17.4 

    我把代理地址改成百度的

    proxy_pass http://www.baidu.com; 

    然后访问 www.demo.cn/static 正常转发走了!

    我在 docker 里 curl 缩主机 172.100.0.1 无法 curl 然后找了设置 mac 回环地址

    sudo ifconfig lo0 alias 172.100.0.1/24 

    本地访问 172.100.0.1 正常 docker curl 172.100.0.1 但是我加上端口 curl http://172.100.0.1:9606 端口又不通。

    docker ping 宿主机又能 ping 通

    64 bytes from 172.100.0.1: seq=0 ttl=64 time=0.175 ms 

    不知道该怎么处理了,想请教下大家!

    9 条回复    2019-09-27 06:26:59 +08:00
    coderabbit
        1
    coderabbit  
    OP
       2019-09-26 21:35:18 +08:00
    docker curl 宿主机
    ```
    curl http://172.100.0.1:9606
    curl: (7) Failed to connect to 172.100.0.1 port 9606: Connection refused
    /var/www/html # curl http://172.100.0.1:9606/static
    curl: (7) Failed to connect to 172.100.0.1 port 9606: Connection refused
    ```
    coderabbit
        2
    coderabbit  
    OP
       2019-09-26 21:46:47 +08:00
    错误日志

    ```

    2019/09/26 21:43:01 [error] 6#6: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 172.100.0.1, server: www.demo.cn, request: "GET /static HTTP/1.1", upstream: "http://172.100.0.1:9606/static", host: "www.demo.cn"
    2019/09/26 21:43:01 [error] 6#6: *2 open() "/var/www/50x.html" failed (2: No such file or directory), client: 172.100.0.1, server: www.demo.cn, request: "GET /static HTTP/1.1", upstream: "http://172.100.0.1:9606/static", host: "www.demo.cn"

    ```
    看到把 50x 了 具体也没有说 50 几。
    iceheart
        3
    iceheart  
       2019-09-26 21:51:44 +08:00 via Android
    go listen 127.0.0.1 当然不行,改成 0.0.0.0
    openwrt
        4
    openwrt  
       2019-09-26 21:52:51 +08:00 via Android
    你的 go 服务部署在哪,监听的是 127.0.0.1 吗,监听 127.0.0.1 用 172.x.x.x 访问当然不通
    676529483
        5
    676529483  
       2019-09-26 21:55:37 +08:00
    你把 nginx 的配置 proxy_pass http://172.100.0.1:9606$request_uri;里面的 ip 改成 127.0.0.1,再试
    coderabbit
        6
    coderabbit  
    OP
       2019-09-26 22:14:27 +08:00
    经自己 curl ping
    curl docker.for.mac.host.internal:9606
    404 page not found
    已经返回 go 服务的 404 了!但是直接访问 www.demo.cn/static/index.html 还是 404 先回去再看原因

    @676529483 经测试过的 不通的!
    @openwrt 本地 mac 开发
    @iceheart 改成 0000 不行的
    mikeguan
        7
    mikeguan  
       2019-09-26 22:21:28 +08:00 via Android
    怎么宿主机和 docker 一个网段?正常安装 docker 的不会选同一网段的。还不如 docker 直接用 host 网络
    coderabbit
        8
    coderabbit  
    OP
       2019-09-26 23:53:55 +08:00
    彻底解决问题反代正常了 感谢大家的回答!
    参考: https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
    https://stackoverflow.com/questions/35744650/docker-network-nginx-resolver

    http {
    resolver 127.0.0.11 ipv6=off;
    }

    resolver 127.0.0.11 ipv6=off; 很重要 且 ip 不能变!

    location ~ ^(/static|/service) {
    proxy_pass "http://host.docker.internal:9606$request_uri";
    }

    http://host.docker.internal 这个地址是 dcoker 访问宿主机地址 https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds 这里已经说的很清楚了! 之前我把 proxy_pass 设置成 http://host.docker.internal 代理依然不通!
    一直报 no resolver defined to resolve host.docker.internal, client: 172.100.0.1,
    然后去 stackoverflow 找到了答案 resolver 127.0.0.11 ipv6=off;设置好重启 nginx 反代顺利通过!
    mchl
        9
    mchl  
       2019-09-27 06:26:59 +08:00 via iPhone
    This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3708 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 05:10 PVG 13:10 LAX 21:10 JFK 00:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86