使用nginx反向代理github加速clone

简介

没有什么比网速慢更恐怖的事情了,尤其是在clone的时候,有时候真的是要好久

所以我就想到了使用nginx反向代理github

操作

首先你要搭建一个nginx

我一般会选择docker搭建nginx,然后使用docker-compose来启动,下面是我的nginx docker-compose 配置文件

https://github.com/bboysoulcn/awesome-dockercompose/tree/master/nginx

差不多就是上面这个样子,欢迎star fork上面这个项目

之后修改nginx的配置文件,我的配置文件如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
upstream github {
    server github.com:443;
    keepalive 16;
}

server {
    listen 80;
    server_name 你的域名;
    rewrite ^ https://$http_host$request_uri? permanent;
    access_log /var/log/nginx/github/https_ip.log;
    error_log  /var/log/nginx/github/https_ip_error.log;
}

server
{
    listen 443;
    server_name 你的域名;
    ssl_certificate   /cert/github/fullchain1.pem;
    ssl_certificate_key  /cert/github/privkey1.pem;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") #防止搜索引擎收录
    {
        return 403;
    }
    location / {
        proxy_set_header Accept-Encoding "";
        proxy_set_header Connection "";
        proxy_http_version 1.1;
        proxy_connect_timeout    10s;
        proxy_read_timeout       10s;
        proxy_set_header Host github.com;

        proxy_hide_header Strict-Transport-Security; #隐藏协议头,避免因为反向代理开启hsts

        proxy_pass https://github;
    }


    access_log /var/log/nginx/github/https_ip.log;
    error_log  /var/log/nginx/github/https_ip_error.log;
}

接下来解释下上面的配置

1
2
3
4
upstream github {
    server github.com:443;
    keepalive 16;
}

这里upstream 建议填写域名,为什么呢,网上有的是写ip的,但是如果你写ip的话因为github每隔地区的节点ip是不一样的,比如你的服务器是在日本的,但是你写了一个韩国的github ip地址,这就会造成反向代理变得缓慢

1
2
3
4
5
6
7
server {
    listen 80;
    server_name 你的域名;
    rewrite ^ https://$http_host$request_uri? permanent;
    access_log /var/log/nginx/github/https_ip.log;
    error_log  /var/log/nginx/github/https_ip_error.log;
}

这里的rewrite就是为了强制跳转到https

1
2
3
4
    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") #防止搜索引擎收录
    {
        return 403;
    }

这里是为了防止搜索引擎收入这个地址,造成地址外泄

其他的配置没有什么可以说的,保持和我一致即可

最后,因为这个只是一个反向代理,所以只能当你碰到比如clone一个项目慢的时候使用

比如当你下载下面这个项目

git clone https://github.com/bboysoulcn/awesome-dockercompose.git

为了加快clone速度,你可以改为你的域名

git clone https://www.example.com/bboysoulcn/awesome-dockercompose.git

使用,但是你想完全当一个镜像站使用,那是不可能的。

欢迎关注我的博客 www.bboy.app

Have Fun