You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复用Nginx 8000端口实现Docker代理的配置问题求助

解决方案

问题根源在于Docker通过HTTPS代理访问ghcr.io时会发送CONNECT请求,而Nginx默认不支持转发这类请求,直接返回400错误。以下是具体的修复步骤:

1. 修改Nginx配置,支持CONNECT请求转发

更新Server A上的Nginx配置,添加对CONNECT方法的处理逻辑,将这类请求转发到Squid的3128端口:

# 在http配置块内添加map规则,提取CONNECT请求的目标地址
map $request_method $connect_target {
    CONNECT $http_host;
    default '';
}

server {
    listen 8000;

    # 保留原有的/db路径转发逻辑
    location /db {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:5921;
    }

    # 专门处理CONNECT请求(HTTPS代理隧道用)
    if ($request_method = CONNECT) {
        proxy_pass http://127.0.0.1:3128/$connect_target;
        proxy_set_header Host $connect_target;
        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;
        proxy_cache off;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        return 200;
    }

    # 处理普通HTTP请求转发到Squid
    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;
    }
}

2. 更新Squid配置,允许Nginx的本地请求

因为现在请求是从Nginx转发到Squid的,源IP是Server A的本地IP(127.0.0.1),需要将其加入Squid的允许列表:

http_port 3128

# 保留原Server B的IP,同时添加本地回环IP
acl allowed_ips src <server B ip> 127.0.0.1
http_access allow allowed_ips

3. 重启服务并测试

  • 验证Nginx配置正确性:nginx -t,无误后重启Nginx:systemctl restart nginx
  • 重启Squid服务:systemctl restart squid
  • 在Server B上重载Docker配置并重启服务:systemctl daemon-reload && systemctl restart docker
  • 测试docker login ghcr.io和docker pull ghcr.io/xxx/xxx操作

备选优化方案

如果Server A有额外的可用IP,可以让Squid直接监听该IP的8000端口,Nginx监听主IP的8000端口,这样无需转发CONNECT请求,配置更简单。但需要确保Server B能访问该额外IP的8000端口,且符合你的网络限制要求。

内容的提问来源于stack exchange,提问作者Sharath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:37:18