请教下 nginx 反代配置 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
andyfan
V2EX    NGINX

请教下 nginx 反代配置

  •  
  •   andyfan 2024-12-16 19:46:35 +08:00 3041 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想自建一个 docker 的镜像源, 写了个配置文件反代 registry-1.docker.io, 同时希望访问这个域名根路径的时候不要反代, 返回网站目录下的 index.html

    但我的配置文件没有按照预期那样工作, 直接访问域名根路径的时候还是反代到了 registry-1.docker.io 导致返回 404, 希望有熟悉 nginx 的老哥帮忙看看, 这要怎么修改?

    我的 server 配置如下

     location = / { add_header Cache-Control private; alias /var/www/html/; index index.html; } location / { # Docker hub 的官方镜像仓库 proxy_pass https://registry-1.docker.io; proxy_set_header Host registry-1.docker.io; 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_buffering off; # 转发认证相关 proxy_set_header Authorization $http_authorization; proxy_pass_header Authorization; # 对 upstream 状态码检查,实现 error_page 错误重定向 proxy_intercept_errors on; recursive_error_pages on; # 根据状态码执行对应操作,以下为 381 、302 、387 状态码都会触发 error_page 301 302 307 = @handle_redirect; } 
    14 条回复    2024-12-18 15:41:10 +08:00
    wyd011011daniel
        1
    wyd011011daniel  
       2024-12-16 19:50:56 +08:00
    试试问问 gpt4o ? ”root /var/www/html; # 注意这里用 root 而非 alias “我刚刚搜的
    jsutfun
        2
    jsutfun  
       2024-12-16 19:56:25 +08:00
    给我 ssh 我上去看看,是不是 alias /var/www/html 改成这样
    andyfan
        3
    andyfan  
    OP
       2024-12-16 20:00:29 +08:00
    @wyd011011daniel 感谢, GPT 的 nginx 配置经常胡说八道, 我尝试了没问出有用的回答

    @jsutfun 是一台只有 ipv6 的机器, 你有 v6 的话发下公钥我给你加上
    X-Force
        4
    X-Force  
       2024-12-16 20:17:06 +08:00
    你还需要转发 auth.docker.io 来完成验证

    # location 要多加这一段
    location /token {
    resolver 8.8.8.8 valid=600s;
    proxy_pass https://auth.docker.io;

    proxy_set_header Host auth.docker.io;
    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_set_header Authorization $http_authorization;
    proxy_pass_header Authorization;

    proxy_buffering off;
    }
    Ipsum
        5
    Ipsum  
       2024-12-16 20:19:16 +08:00
    你应该需要 stream 代理模块,而不是 proxy 。
    xqzr
        6
    xqzr  
       2024-12-16 20:33:48 +08:00
    反代 HTTPS 可能需要发送 SNI
    proxy_ssl_server_name on;
    andyfan
        7
    andyfan  
    OP
       2024-12-16 20:47:08 +08:00
    谢谢各位, 可能我没有表达清楚问题. 目前反代回源的部分是正常的, 我的问题是希望直接访问域名根路径的时候( http://docker.aaaa.com/), 能被`location = / {`捕获, 从而返回 index.html 文件. 在访问其他路径的时候(比如 http://docker.aaaa.com/v2)才反代到 docker.io 处理.

    但实际上是所有请求都走了反代, 导致 http://docker.aaaa.com/请求也被送到了 docker.io 处理
    smallparking
        8
    smallparking  
       2024-12-16 20:58:07 +08:00 via Android
    @andyfan 不对吧,你这个 location 规则没问题
    404 是不是有可能是你的 nginx 文件没有读取权限之类的?
    smallparking
        9
    smallparking  
       2024-12-16 20:59:23 +08:00 via Android
    @smallparking 看一下 404 的请求的 error_log 就知道 404 的原因了
    naoying
        10
    naoying  
       2024-12-16 21:04:43 +08:00
    我用你的配置文件验证了,没问题


    location = / {
    add_header Cache-Control private;
    return 301 https://www.google.com;
    }
    jsutfun
        11
    jsutfun  
       2024-12-16 21:05:39 +08:00
    @andyfan #3 这么狠么哈哈哈哈哈哈哈哈
    liuliancao
        12
    liuliancao  
       2024-12-17 17:29:06 +08:00
    error_log 开启 debug 可以看到里面又跳转到了 index.html 了,可以考虑用 try_files 这样就没跳转了
    2024/12/17 17:25:18 [debug] 23691#23691: *63 generic phase: 13
    2024/12/17 17:25:18 [debug] 23691#23691: *63 content phase: 14
    2024/12/17 17:25:18 [debug] 23691#23691: *63 content phase: 15
    2024/12/17 17:25:18 [debug] 23691#23691: *63 open index "/var/www/html/index.html"
    2024/12/17 17:25:18 [debug] 23691#23691: *63 internal redirect: "/index.html?"
    2024/12/17 17:25:18 [debug] 23691#23691: *63 rewrite phase: 1

    try_files 参考
    location = / {
    add_header Cache-Control private;
    alias /var/www/html/;
    try_files index.html $uri/index.html;
    }
    aarontian
        13
    aarontian  
       2024-12-17 17:58:52 +08:00
    @andyfan 你要反代 /v2 的请求应该是单独配置一个 location=/v2/ 的 alias 吧,而不是把整个/都配置掉
    andyfan
        14
    andyfan  
    OP
       364 天前
    @liuliancao 老哥你的分析思路太赞了, 改用 try_files 以后确实解决了问题, 感谢!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     980 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 19:14 PVG 03:14 LAX 11:14 JFK 14:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86