V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
cshenxi
V2EX  ›  NGINX

萌新求教关于 NGINX 反代 github,实现 release 下载加速的问题

  •  
  •   cshenxi · 2020-05-13 20:47:48 +08:00 · 5016 次点击
    这是一个创建于 1656 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前在社区看到过几个大佬发的 github 镜像站的地址,感觉甚是好用,于是自己也想整着玩。。
    无奈半路出家,很多东西都是网上直接找教程啃现成的,所以学艺不精,也都是一些小兴趣,完全从头学 nginx 估计也学不下去。。厚着脸皮过来伸手请教,望各位大佬赐教!!
    直接贴代码吧,下面是我现在用的 nginx 的配置文件,可以实现反代 github.comraw.githubusercontent.com 的反代,点 raw 代码,也不会跳去 raw.githubusercontent.com 站,而是转成自己的域名显示出来的。。但是如果去 release 页面下载 zip 或 ext 之类的包,则最终会直接从 s3.amazonaws.com 之类的地方下载,如何实现 release 部分也反代下载呢?

    server
    {
        listen 443 ssl http2 reuseport;
        server_name MY.DOMAIN.COM;
    
        ssl_certificate       /etc/nginx/ssl/certificate.cer;
        ssl_certificate_key   /etc/nginx/ssl/certificate.key;
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_timeout      1d;
        ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
        ssl_prefer_server_ciphers on;
        ssl_session_cache        shared:SSL:50m;
        ssl_session_tickets      on;
        ssl_stapling             on;
    
        resolver 8.8.8.8;
    
        proxy_intercept_errors on;
    
        recursive_error_pages on;
        
        location / {
            proxy_cache_valid  200 301 302 1d;
        
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Referer https://github.com/;
            proxy_set_header Host github.com;
            proxy_pass https://github.com/;
        
            error_page 302 = @error_page_302;
        }
        
        location @error_page_302 {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Referer https://github.com/;
            proxy_set_header Host raw.githubusercontent.com;
            set $download $upstream_http_location;
            proxy_pass $download;
        }
    }
    

    在此谢过各位大佬了!!

    17 条回复    2020-06-01 09:10:04 +08:00
    zhengfan2016
        1
    zhengfan2016  
       2020-05-13 21:03:26 +08:00   ❤️ 1
    其实不用 nginx,直接白嫖 cloudflare 的服务,全球 cdn 加速,自己一分钱都不用出
    https://github.com/hunshcn/gh-proxy
    varrily
        2
    varrily  
       2020-05-13 21:06:55 +08:00
    zip 是 302 到了 s3,你是的代理也只是实现了同样的 302 功能。应该是这样。
    cshenxi
        3
    cshenxi  
    OP
       2020-05-13 21:33:15 +08:00
    @zhengfan2016 话虽如此。。但是还是想自己反代着玩。。重点是我自己的 vps 速度真的很快,反代了 github 用起来很爽。。应该比 CF 快。。

    @varrily 没太理解大佬的意思。。意思我改一改就能到 s3 了,还是说,实现不了。。
    mengyx
        4
    mengyx  
       2020-05-13 21:41:22 +08:00
    @cshenxi Release 的实际下载地址是跳转到 s3 的。如果想实现,那你应该把 s3.amazonaws.com 也反代了。
    而且 release 跳转的时候,你还得修改跳转的的地址到你反代的地址。
    cshenxi
        5
    cshenxi  
    OP
       2020-05-13 21:51:04 +08:00
    @mengyx 但是有一点我一直到现在都搞不定,就是跳转到的 s3 不是固定的网址,每次都会变 xxxx-xxx-xxx.s3.amazonaws.com ,每次前面的都不一样,这样怎么反代呢。。如果像 raw.githubusercontent.com 那样是固定的,我应该试试就能弄出来了。。。
    cshenxi
        6
    cshenxi  
    OP
       2020-05-13 21:54:54 +08:00
    关于跳转反代的部分,最让我搞不定,无从下手的部分是跳转 s3 部分的网址每次都会变,例如
    `https://github.com/ginuerzh/gost/releases/download/v2.11.0/gost-linux-amd64-2.11.0.gz`
    直接右键得到这样一个链接
    点击后会跳转到
    `https://github-production-release-asset-2e65be.s3.amazonaws.com/xxxxxxxxxxxxxx`
    后面像乱码一样也非常多一长串,重点是前面的 s3 之前的部分每次也会变。。那我要怎么处理呢?
    mengyx
        7
    mengyx  
       2020-05-13 21:58:50 +08:00
    @cshenxi 大概想到两种方案
    1. 用泛域名绑定(配置方法自行搜索)
    实现 xxx.s3.amazonaws.com/any-path?any-query => xxx.your-domain.com/any-path?any-query

    2. 在 Path 里面传递子域名信息
    xxx.s3.amazonaws.com/any-path?any-query => your-domain.com/xxx/any-path?any-query
    cshenxi
        8
    cshenxi  
    OP
       2020-05-13 22:03:08 +08:00
    @mengyx 感谢大佬提点 。。我去找找。。关于 1.,是不是可以考虑。。或者大概率用正则来做匹配之类的?
    mengyx
        9
    mengyx  
       2020-05-13 22:14:58 +08:00   ❤️ 1
    @cshenxi 差不多吧 搜一下 “nginx 泛解析” 挺多文章的
    cshenxi
        10
    cshenxi  
    OP
       2020-05-13 22:42:31 +08:00
    @mengyx 感谢大佬!!我再去学习学习
    love
        11
    love  
       2020-05-13 23:32:03 +08:00
    有 http 代理形式不好吗为啥要反代?
    cshenxi
        12
    cshenxi  
    OP
       2020-05-14 00:00:48 +08:00
    @love http 代理是指代理访问吗。。有时候想让别人访问快点。。或者在其他地方自己不方便 http 。。如果反代就非常方便了。。
    neteroster
        13
    neteroster  
       2020-05-14 06:39:03 +08:00 via Android
    cshenxi
        14
    cshenxi  
    OP
       2020-05-14 10:50:35 +08:00
    @neteroster 谢谢大佬,我看了这个,然后拉下来观摩了一下。。发现 nginx 好像只被用来当作显示网页的工具。。主要是靠 python 实现的吧。。这种我玩不来唉。。只想搞一个 nginx 的简单反代。。
    cshenxi
        15
    cshenxi  
    OP
       2020-05-14 15:50:54 +08:00
    感谢楼上各位大佬的回复,果然还是我对 nginx 太萌新了。。把 proxy_set_header Host 改掉就实现了,再次感谢大家支招!
    loveqianool
        17
    loveqianool  
       2020-06-01 09:10:04 +08:00
    能把完整配置发一下吗?我也想搞个反代自用.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3680 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 124ms · UTC 04:38 · PVG 12:38 · LAX 20:38 · JFK 23:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.