码峰博客 – 码而思

分享积累从此时此刻开始

nginx docker容器代理至局域网主机

nginx docker 容器,在 windows 环境下,使用 host 网络模式,可以和宿主机、局域网主机进行通信。但在 MAC 下,不支持host 模式,该怎麽处理呢。

可以使用宿主机转发模式:nginx docker 容器 -> 宿主机 -> 目标主机

1.宿主机安装 socat

# 安装 socat
brew install socat
# 配置转发,宿主机监听 80 端口,转发至 192.168.31.64:80
socat TCP-LISTEN:80,fork TCP:192.168.31.64:80

# 安装过程中报错,可尝试重新安装 brew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

如果宿主机开启80已被占用,可使用其它端口

# 宿主机监听 8080 端口,转发给目标主机 80
socat TCP-LISTEN:8080,fork TCP:192.168.31.64:80

2. nginx docker 容器配置代理

# 需要与宿主机监听的端口一致
# dnmp 环境中 host.docker.internal 可以表示宿主机
location /ISAPI {
        proxy_pass http://host.docker.internal:8080; 
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}