docker 子网
172.100.0.0/24
本地宿主机 ip
//我不确定
172.100.0.1
go 本地服务及端口
127.0.0.1:9606
本地域名
ww抗投诉服务器w.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
不知道该怎么处理了,想请教下大家!
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
```
错误日志
```
2019/09/26 21:43:01 [error] 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*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 几。
go listen 127.0.0.1 当然不行,改成 0.0.0.0
你的 go 服务部署在哪,监听的是 127.0.0.1 吗,监听 127.0.0.1 用 172.x.x.x 访问当然不通
你把 nginx 的配置 proxy_pass http://172.100.0.1:9606$request_uri;里面的 ip 改成 127.0.0.1,再试
经自己 curl ping
curl docker.for.mac.host.internal:9606
404 page not found
已经返回 go 服务的 404 了!但是直接访问 www.demo.cn/static/index.html 还是 404 先回去再看原因
经测试过的 不通的!
本地 mac 开发
改成 0000 不行的
怎么宿主机和 docker 一个网段?正常安装 docker 的不会选同一网段的。还不如 docker 直接用 host 网络
彻底解决问题反代正常了 感谢大家的回答!
参考: https://docs.docker.com/docker-for-mac/networking//>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/这里已经说的很清楚了! 之前我把 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 反代顺利通过!
This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac.