无外网Docker容器如何通过NGINX代理发送Slack webhook?
无外网Docker容器通过Nginx代理发送Slack Webhook配置说明
背景
- 所有Docker容器运行在内部网络,无公网访问权限,公网请求需通过内部Nginx代理转发
- 需求为从内部容器向Slack发起webhook请求,已在容器
/etc/hosts中将hooks.slack.com解析指向内部Nginx代理节点
初始配置问题
初始采用301重定向配置,从容器内用CURL测试仅返回301响应,无法完成消息推送,配置如下:
server { listen 80; server_name hooks.slack.com; return 301 https://hooks.slack.com$reques_uri; }
错误原因
301重定向的逻辑是告知客户端(内部容器)直接访问公网Slack地址,而容器本身无公网访问权限,无法完成后续请求;此外该配置还存在语法问题:$reques_uri拼写错误(应为$request_uri)。
修复方案
改用Nginx反向代理模式,由具备公网访问权限的Nginx节点代容器发起请求,再将响应返回给容器,可用配置如下:
server { listen 80; server_name hooks.slack.com; location / { proxy_pass https://hooks.slack.com; proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; } }
内容的提问来源于stack exchange,提问作者yozice
相关产品推荐
相关产品推荐

