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
不知道该怎么处理了,想请教下大家!
1
coderabbit OP 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 ``` |
2
coderabbit OP 错误日志
``` 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 几。 |
3
iceheart 2019-09-26 21:51:44 +08:00 via Android
go listen 127.0.0.1 当然不行,改成 0.0.0.0
|
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 访问当然不通
|
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,再试
|
6
coderabbit OP 经自己 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 不行的 |
7
mikeguan 2019-09-26 22:21:28 +08:00 via Android
怎么宿主机和 docker 一个网段?正常安装 docker 的不会选同一网段的。还不如 docker 直接用 host 网络
|
8
coderabbit OP 彻底解决问题反代正常了 感谢大家的回答!
参考: 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 反代顺利通过! |
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.
|