目标:我正在尝试在服务器A上设置代理服务器,以便服务器B可以通过服务器A使用docker代理,条件如下:
我当前的设置是:
在服务器 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
请帮助我如何实现我的目标,或者是否有更好的方法可以使用?
好吧,终于找到解决办法了:
我必须使用 ngx_http_proxy_connect_module 重新编译 nginx
Git 存储库:https://github.com/chobits/ngx_http_proxy_connect_module
但是我确实改变了重新编译期间配置 nginx 的方式,并添加了常规安装中使用的所有配置参数,这些参数列出了 nginx -V 并添加末尾自述文件中描述的添加模块