有条件在服务器A上设置代理服务器,让服务器B可以通过http代理进行Docker操作

问题描述 投票:0回答:1

目标:我正在尝试在服务器A上设置代理服务器,以便服务器B可以通过服务器A使用docker代理,条件如下:

  1. 服务器 B 只能通过 8000 端口与服务器 A 通信
  2. 端口 8000 已经绑定到服务器 A 上运行的 nginx,调用“location /db”被路由到 Flask 服务器
  3. 服务器B应该能够通过docker代理执行docker登录和docker pull到ghcr.io

我当前的设置是:

在服务器 B 上:将 docker 的 /etc/systemd/system/docker.service.d/http-proxy.conf 修改为:

[Service]
Environment="HTTP_PROXY=http://<server A ip>:8000"
Environment="HTTPS_PROXY=http://<server A ip>:8000"
Environment="NO_PROXY=localhost,127.0.0.1"

在服务器A上:我已经安装并更新了squid.conf

http_port 3128

acl allowed_ips src <server B ip>
http_access allow allowed_ips

PS如果将服务器B的dockerconf更改为端口3128我就可以使用docker登录和docker pull

问题 由于 nginx 已经绑定了端口 8000 并监听 :8000/db api 流量,所以我设置了 proxy_pass 块,但是 nginx 无法解析来自 docker 登录的调用,并且我不断收到 Bad request 错误。这是一个简化的 nginx我正在使用的conf文件:

server {
    listen 8000;
    location /db {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:5921;
    }

    location / {
        proxy_pass http://127.0.0.1:3128;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

错误响应: 在 nginx 日志中显示:

  "CONNECT ghcr.io:443 HTTP/1.1" 400 166 "-" "-"

并且

docker login
命令返回
Error response from daemon: Get "https://ghcr.io/v2/": Bad Request

请帮助我如何实现我的目标,或者是否有更好的方法可以使用?

nginx proxy nginx-reverse-proxy squid docker-proxy
1个回答
0
投票

好吧,终于找到解决办法了:

我必须使用 ngx_http_proxy_connect_module 重新编译 nginx

Git 存储库:https://github.com/chobits/ngx_http_proxy_connect_module

但是我确实改变了重新编译期间配置 nginx 的方式,并添加了常规安装中使用的所有配置参数,这些参数列出了 nginx -V 并添加末尾自述文件中描述的添加模块

© www.soinside.com 2019 - 2024. All rights reserved.