在 Nginx 后面运行 Docker Engine API
Posted
技术标签:
【中文标题】在 Nginx 后面运行 Docker Engine API【英文标题】:Running Docker Engine API behind Nginx 【发布时间】:2020-05-28 15:12:42 【问题描述】:我正在尝试在 nginx 后面运行和使用 docker 作为反向代理。一切正常,除非 docker 使用原始流 "application/vnd.docker.raw-stream"
响应而不是正常的 HTTP 响应。这发生在端点/start
、/attach
等这里记录:https://docs.docker.com/engine/api/v1.21/#operation/ExecStart
这是我的 nginx 配置没有将 docker 响应转发给客户端的情况。我尝试搜索它,只有一篇博客文章建议对实际 nginx C 文件进行修补:https://blog.yadutaf.fr/2014/12/12/how-to-run-docker-behind-an-nginx-reverse-proxy/
我完全按照上面的博客,但是,设置r->upstream->upgrade = 1;
似乎对docker 中的/start
HTTP 端点没有影响。 Nginx 根本没有响应。有没有办法解决?这是我此刻的 nginx.conf 文件:
daemon off;
error_log /dev/stdout info;
# error_log logs/error.log debug;
events
http
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /dev/stdout main;
# include mime.types;
# default_type application/octet-stream;
# sendfile on;
# keepalive_timeout 65;
upstream dockerpool
# session_sticky cookie=sessionid fallback=off mode=insert option=indirect;
# backup server
# server nginx_dev_test:80;
server socat:2376;
server
listen 80;
location /
# The upstream here must be a nginx variable
set $ups dockerpool;
proxy_buffering off;
proxy_pass http://$ups;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
【问题讨论】:
任何可以访问 Docker API 的人都可以轻松地启动系统。为什么要通过 nginx 实例发布出来? 我对软件有自定义需求,不用担心安全部分,一切都在受控环境中进行。如果可能的话,请帮助我处理技术部分@DavidMaze 【参考方案1】:对于任何遇到同样问题的人,我在互联网上进行了广泛的研究,没有理智的方法可以得到我想要使用 Nginx 的东西,即使你解决了这个问题,你也会对自动缩放/加载大吃一惊-平衡这种架构。
今天,我使用棍子桌搬到了 HAProxy,就像一个魅力。 Nginx 不适合这种用例。
更新:愚蠢的我。这可以与 nginx 和/或 HAProxy 一起使用,只需确保在运行 docker 命令等时将 HTTP 连接升级(降级?)到 TCP 连接。
【讨论】:
以上是关于在 Nginx 后面运行 Docker Engine API的主要内容,如果未能解决你的问题,请参考以下文章
Angular App 在 nginx 上运行并在附加的 nginx 反向代理后面
在 nginx 代理后面使用 docker 私有注册表 (v2) 的 HTTP 响应格式错误
docker 中 nginx 后面的 Keycloak 导致 404 和不定式重定向
在 Nginx 代理后面时,Keycloak Docker Instace 中的 X-Frame-Options 拒绝加载