更新:2025-07-07
因不可抗拒,现已无限期下线该服务,请自行部署使用
请参见如下链接自行部署
https://github.com/szkzn/mirror-github-with-nginx
https://www.0z.gs/soso/Github-mirror.html
我从未想过 .gs
这个国家和地区顶级域名(ccTLD) 会真的被相关管辖方机构审查,今天是见识到了,该 ccTLD 是南乔治亚和南三明治群岛(英国海外领地)的国家和地区顶级域名,这个跟我下线该服务有很大关系,我被英国的网络安全机构举报了
我的这个域名是在 west.cn 西部数码购买的,然后修改 NS 指向实际托管在 阿里云的 DNS 云解析平台上,今晚收到阿里云的相关邮件
您的资产 https://hub.0z.gs/topics/cloud.html 疑似发布传播欺诈侵权类违法违规内容,请您在24小时内排查整改或反馈情况。如逾期未处理且未反馈情况,根据阿里云服务协议,将可能导致您的相关服务暂停。若您已完成整改或存在疑问,您可通过安全管控-云资源安全管控事件入口提交或通过阿里云官网工单入口与我们联系。
然后我的域名 0z.gs 被阿里云单方面先行暂停解析了,我当时看到那个链接就知道要寄
这个链接 https://github.com/topics/cloud.html 是 GitHub Topics界面,用于展示该主题下与 “cloud” 相关的公开仓库,是一个时刻动态更新的专题页,也就是我无法知道是具体的什么 PATH (如具体的某个仓库)导致的被投诉
我先行在控制台下线了所有 GitHub 镜像域名的解析,然后这时我发现镜像 GitHub 的那个美国服务器也失联了,然后心里一凉,已经有所预感了,应该是被全家桶投诉一条龙安排了,登录 CloudCone 这个 IDC 的后台,果然看到了 Abuse Report 通知
这里我大概知道阿里云那个也是这个投诉方一条龙全部投诉举报了,CloudCone 这里提供了举报方发送的邮件原文
举报总结(https://incident.netcraft.com/dc88483ced27/)
举报来源:英国网络安全公司 Netcraft。
投诉对象:您服务器上托管的链接
https://hub.0z.gs/topics/python3-gngr-proxy-harvester
(IP地址:1.2.3.4)
违规指控:该页面涉嫌 钓鱼攻击(Phishing),伪装成 GitHub 相关内容,试图误导用户或收集敏感信息
受害方:GitHub(netcraft 是代表 GitHub 提交的滥用报告)
要求:
立即删除该钓鱼内容;
保留副本供 GitHub 与执法部门调查;
根据那个提供的详情链接,我看到举报方使用了自动化的工具尝试登录镜像站,因为某些原因登录失败,然后判定钓鱼欺诈之类的,不过镜像站的角色的确是中间人链路,主要还是开放了登录功能的原因吧
那就顺势下线服务
- 更新:2025-07-02
开源了 Nginx 使用反向代理镜像 GitHub 的相关配置文件,建议自托管实现
项目地址:https://github.com/szkzn/mirror-github-with-nginx
更新:2025-06-29
支持登录镜像站 https://hub.0z.gs(隐私、安全担忧者请勿登录),能自动实现访问、下载加速- 支持加速功能:
1> GitHub 网页访问加速
2> git clone 操作
3> raw 访问
4> Gist 访问
5> Release、Assets 页面访问、下载加速
6> 私有仓库加速(需登录)
- 支持加速功能:
⚠️ 登录 Demo 镜像站的安全声明与用户知情提示
本镜像站通过 Nginx 反向代理 GitHub 的相关域名,以加速访问及绕过连接限制。 所有请求在传输过程中将经过本服务器代理,构成中间人传递链路(MITM)
⚠️ 中间人代理结构意味着:
本服务器可访问或修改您与 GitHub 之间的所有通信内容,包括登录请求、Cookie、OAuth Token、仓库操作等敏感数据。
使用本服务即代表您已知悉并同意以下事项:
通过镜像站登录 GitHub 时,您的账号、密码、Cookie、2FA 验证码、令牌等敏感信息将在本服务器内被中转处理;
本站不会主动存储、记录或转发用户凭证信息,且会主动加固镜像站与双方的通信安全:全程 TLS 1.3 / 1.2 加密通信,强制验证上游源站 GitHub SSL 证书,且镜像站使用公开 Let's 证书,但无法从结构上排除泄露风险;
结构性风险包括但不限于:
凭证泄露:账号密码、2FA 验证码、令牌可能被服务器或中间模块捕获;
会话劫持:镜像站可读取并转发 GitHub 的会话 Cookie;
内容替换 / XSS 风险:镜像站使用 Nginx 模块 ngx_http_sub_module 替换页面内容,可能引发内容篡改或注入漏洞;
违反 GitHub 服务条款:该镜像行为可能被视为违反 GitHub TOS,并存在封禁风险。
推荐仅将本站用于访问公共资源(如代码浏览、Release 下载),不建议在镜像站执行登录、私有仓库访问、令牌授权等操作;
若您继续使用登录功能,视为您已明确理解相关风险并自愿承担
使用登录功能时,强烈建议私有化部署使用
修复直接使用镜像域名 hub.0z.gs 访问 Release 页面,因 OPTIONS 预检请求(preflight request)的 CORS 问题导致 Assets 下拉菜单页面无法加载显示,检查后发现是 expanded_assets 路径的请求直接访问了 GitHub,导致跨域问题
v5.6.0:1 Access to fetch at 'https://github.com/Bubka/2FAuth/releases/expanded_assets/v5.6.0' from origin 'https://hub.0z.gs' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Assets 那个页面其实是 tag 路径替换为 expanded_assets 的结果,就是把网址里的 /tag/ 路径换成 /expanded_assets/ 就能正常显示
这次更新之前是没有使用 Nginx 的 sub_filter 模块的功能,我一直不想按之前的方案来全局替换页面内容,sub_filter 模块会在反向代理层对响应内容进行字符串替换,比较消耗服务资源(内存、CPU),但是那个预检请求一直有莫名其妙的 CORS 问题,还有一些七七八八的遗漏代理路径请求,只好使用 sub_filter 给它处理的干净一些,避免绕过反向代理直接请求 GitHub
- 更新:2025-06-18,全面提升镜像站国内访问速度
偶然在某个 vps 小鸡上使用了自己的加速服务,才发现下载没网速,使用前直连 GitHub 下载,wget 速度仅 5-10 KiB/s
使用后 50 KiB/s,怎么这么拉,检查后发现是反代的 VPS 没有对系统进行全面网速优化,这肯定是大家(好邻居?)都在暴力发包,你行我也行,直接更换系统内核到 BBR Plus 新版内核,调整拥塞控制算法、队列算法 重启系统后测试对比
下载 Github Release 文件
原始 URL 直连: 5-10 kiB/s 甚至无法连接、频繁 timeout、重试
镜像加速 URL: 8.3 MiB/s
差距犹如天堑,提升 800% 倍+
加速后关键日志输出:Reusing existing connection to hub.0z.gs:443. HTTP request sent, awaiting response... 200 OK Length: 173254327 (165M) [application/octet-stream] Saving to: ‘mihomo-party-macos-1.7.6-x64.pkg.1’ mihomo-party-macos-1.7.6-x64.pkg.1 100%[==============================================================>] 165.23M 8.47MB/s in 20s 2025-06-18 17:03:33 (8.33 MB/s) - ‘mihomo-party-macos-1.7.6-x64.pkg.1’ saved [173254327/173254327]
加速前日志输出:
wget https://github.com/mihomo-party-org/mihomo-party/releases/download/v1.7.6/mihomo-party-macos-1.7.6-x64.pkg --2025-06-18 17:05:42-- https://github.com/mihomo-party-org/mihomo-party/releases/download/v1.7.6/mihomo-party-macos-1.7.6-x64.pkg Resolving github.com (github.com)... 20.205.243.166 Connecting to github.com (github.com)|20.205.243.166|:443... connected. HTTP request sent, awaiting response... No data received. Retrying. --2025-06-18 17:05:48-- (try: 2) Connecting to github.com (github.com)|20.205.243.166|:443... connected. HTTP request sent, awaiting response... 302 Found --2025-06-18 17:05:49-- Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.108.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 173254327 (165M) [application/octet-stream] Saving to: ‘mihomo-party-macos-1.7.6-x64.pkg.2’ mihomo-party-macos-1.7.6-x64.pkg.2 0%[ ] 348.48K 9.99KB/s eta 2h 47m
更新:2025-05-05
恢复部分服务,目前不支持登录,有限的 git clone https 支持、GitHub 网页访问加速、Release 下载、Gist 访问
纯用爱发电,随时下线,无可用性保证,无速度保证, 0% SLA,滥用就下线
在一台新设备需要访问使用相关服务,想着找下镜像使用,结果一个个都拉闸.....无论如何,建议还是自备代理,并在服务器上面配置好代理环境使用,镜像代理加速不是万能的,局限还是很多的,由于某些不可抗拒,来自监管的压力也是愈演愈烈,如众所周知的 Docker 仓库国内公共加速服务陆续下线,总而言之在国内有很多限制,还是使用代理可以一劳永逸,并保持原始 URL 实时更新获取,维护也简单
加速流程:用户 → 镜像站(中间人 MITM)→ GitHub 源站(实时回源 GitHub 无缓存)
- 关于服务器线路说明
已经不是很重要了,得益于 BBR Plus 内核 + 新的拥塞控制、队列算法参数加持,晚高峰依然能稳定展示神力,移动联通随便跑满 100 Mbps +,电信在走 163 国际出口情况下,依然能维持 4 MiB/s 稳定速率
当前提供的镜像反代域名:
镜像列表:
GitHub 域名 镜像域名 备注 github.com hub.0z.gs raw.githubusercontent.com raw.0z.gs gist.github.com gist.0z.gs
使用方法:替换 Github 相关域名为 镜像域名,其余路径、参数保持不变
示例
Release 文件下载
原始 URL
https://github.com/i486/VxKex/releases/download/Version1.1.2.1428/KexSetup_Release_1_1_2_1428.exe
镜像 URL
https://hub.0z.gs/i486/VxKex/releases/download/Version1.1.2.1428/KexSetup_Release_1_1_2_1428.exe
git clone https
原始 URL
https://github.com/i486/VxKex.git
镜像 URL
https://hub.0z.gs/i486/VxKex.git
raw 访问
原始 URL
https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/GeneralClashConfig.yml
镜像 URL
https://raw.0z.gs/ACL4SSR/ACL4SSR/master/Clash/GeneralClashConfig.yml
Gist 访问
原始 URL
https://gist.github.com/mizchi/651b8c1fcee34d5c299c17bba38e8623
镜像 URL
https://gist.0z.gs/mizchi/651b8c1fcee34d5c299c17bba38e8623
下面开始,这是很久之前发布的内容了,没什么参考价值了
更新:2023-2-15 我看到不少人私信我如何部署镜像站,文章我已经给了上游项目的 GitHub 地址了,到他们的子仓库(地址在文末鸣谢的第一行),可以看到里面是一些 nginx 反向代理的配置文件,依葫芦画瓢即可,下面是一个示例: github.com 主站
server
{
#listen 80 reuseport;
listen 443 ssl http2 reuseport;
#listen 443 ssl http2;
server_name hub.0z.gs;
#root /web/nginx/stop;
client_max_body_size 0;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_vary on;
gzip_proxied any; # test required
gzip_types
text/plain
text/css
text/js
text/xml
text/javascript
application/javascript
application/json
application/xml
application/rss+xml
image/svg+xml;
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
add_header Permissions-Policy interest-cohort=();
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /web/nginx/vhost/cert/github.0z.gs/fullchain.pem;
ssl_certificate /web/nginx/vhost/cert/github.0z.gs/fullchain.pem;
ssl_certificate_key /web/nginx/vhost/cert/github.0z.gs/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
ssl_session_tickets off;
#add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
# releases download
location ~ ^/[^/]+/[^/]+/releases/download/ {
return 301 https://download.0z.gs$request_uri;
}
# archive download
location ~ ^/[^/]+/[^/]+/archive/ {
return 301 https://archive.0z.gs$request_uri;
}
location ~ ^/[^/]+/[^/]+/suites/[^/]+/artifacts/ {
return 301 https://download.0z.gs$request_uri;
}
# Fuck Search Engine
location /robots.txt {
allow all;
}
location / {
proxy_set_header Access-Control-Allow-Origin *;
proxy_set_header Access-Control-Allow-Methods 'GET, POST, OPTIONS DELETE HEAD';
proxy_set_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Set-Cookie,Cookie,x-pjax-url';
add_header 'Access-Control-Allow-Credentials' 'true';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_hide_header referrer-policy;
proxy_hide_header content-security-policy;
proxy_hide_header Strict-Transport-Security;
#proxy_hide_header set-cookie;
proxy_hide_header x-pjax-url;
proxy_set_header Host github.com;
proxy_set_header Accept-Encoding "";
proxy_set_header Referer https://github.com/;
proxy_set_header Origin https://github.com;
#proxy_set_header Connection "";
add_header x-pjax-url "https://hub.0z.gs$request_uri";
proxy_http_version 1.1;
proxy_connect_timeout 10s;
proxy_read_timeout 10s;
proxy_socket_keepalive on;
proxy_ssl_server_name on;
sub_filter "\"https://raw.githubusercontent.com" "\"https://raw.0z.gs";
sub_filter "\"https://github.com" "\"https://hub.0z.gs";
sub_filter "\"https://github.githubassets.com" "\"https://assets.0z.gs";
sub_filter "\"https://github.githubassets.com" "\"https://assets.0z.gs";
sub_filter "https://customer-stories-feed.github.com" "https://customer-stories-feed.0z.gs";
sub_filter_once off;
proxy_cookie_domain github.com hub.0z.gs;
proxy_redirect https://github.com https://hub.0z.gs;
proxy_redirect https://raw.githubusercontent.com https://raw.0z.gs;
proxy_redirect https://github.githubassets.com https://assets.0z.gs;
proxy_redirect https://customer-stories-feed.github.com https://customer-stories-feed.0z.gs;
proxy_redirect https://codeload.github.com https://codeload.0z.gs;
proxy_pass https://github;
}
# Block search engine
# if ($http_user_agent ~* "qihoobot|Baiduspider|Bingbot|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;
# }
# Anti Agent Bot DDoS
# If behind CDN, use folloing commented code
# if ($http_x_forwarded_for != $remote_addr) {
# return 503;
# }
if ($proxy_add_x_forwarded_for != $remote_addr) {
return 503;
}
access_log /web/logs/github.0z.gs.log;
error_log /web/logs/github.0z.gs.error.log;
}
因最近需要召开很多大会,GitHub 镜像站计划在 2022-09-21 23:59:59 UTC+8 暂时关闭服务,江湖路远,有缘再见!
如果需要自行部署为公共服务,这里提供一些数据参考,自 2021-12-11 到 2022-09-21 关闭服务,关站的最后一段时间,每日流量大约消耗 1.2 TiB,一个月 消耗 35 TiB + 流量,常驻网络带宽占用为 300 Mbps +,cpu 平均负载 1.7,服务器配置要求不是很高,cpu、硬盘 io 基本没什么要求,主要压力还是在网络带宽。
使用须知
- 服务端不保存任何日志和修改转发过程,仅是单纯流量转发(用户 → 镜像站 → GitHub 源站),有隐私、安全担忧者请勿登录镜像站
- 纯用爱发电,随时下线,无可用性保证,无速度保证
- 感谢这个伟大的项目:https://github.com/FastGitORG。根据该 GitHub 项目部署了一个使用 Nginx 反向代理实现的 GitHub 镜像站
可以通过镜像站加速 GitHub 绝大部分内容 , 全程无感知,使用习惯跟原来保持一致,镜像站支持登录账号,如下图所示
镜像列表:
GitHub 域名 镜像域名 备注 github.com hub.0z.gs raw.githubusercontent.com raw.0z.gs download.github.com download.0z.gs archive.github.com archive.0z.gs codeload.github.com codeload.0z.gs assets.github.com assets.0z.gs customer-stories-feed.github.com customer-stories-feed.0z.gs
- 不登录账号的使用说明,比如要加速一个 Release 的下载链接:
原始 Release URL:
https://github.com/ender-zhao/Clash-for-Windows_Chinese/releases/download/CFW-V0.20.6_CN/Clash.for.Windows-0.20.6-win.7z
如果想加速下载/访问,简单替换域名部分为镜像地址,其余不变:
如果需要加速全部 GitHub 访问(网页访问和下载) ,可以使用镜像站登录账号 : https://hub.0z.gs
- 其他 Git 操作以此类推,简单替换相应原始 GitHub 域名为镜像域名即可。
限制:暂未实现 ssh 克隆支持,,佛系跟随上游项目更新。
增强:a>不限 git 操作的仓库/文件大小(原上游配置限制 2 GiB),但是请勿滥用,否则会加回去限制
b>所有 镜像域名支持 CORS 跨域,方便调用,所有 镜像域名的响应 header 已增加跨域参数支持
未来功能:
- 接入 Cloudflare CDN
- 支持 SSH 克隆
- 服务器网络:
电信 163 国际出口,美国洛杉矶 MC 机房,联通 / 移动 友好线路;
电信闲时尚可,晚高峰自求多福,或者等待后续接入 Cloudflare
更新日志:
2022-08-31:最近需要召开很多大会,加上长期用爱发电承担服务器费用压力日渐增大,可能会 暂时/永久 关闭镜像站
已知问题:登录镜像站下载 GitHub action 里面的 Artifacts 附件会返回 404 错误。
2022-8-12 修复一个 BUG,当项目包含任意 *.php 后缀的文件时,Nginx 反向代理会意外解析 php,返回 404 http 状态码
2022-5-13,已同步上游项目进度,现已支持 通过镜像站 登录 GitHub,登录镜像站之后无需手动替换域名,使用方式跟原版 GitHub 一样,全程静默替换反代域名至镜像域名,如下图所示,支持静默自动替换的范围见 文中的镜像列表 。
鸣谢:
https://github.com/FastGitORG/nginx-conf
https://doc.fastgit.org/zh-cn/
https://github.com/fastgitorg/document
https://fastgit.org/
https://linux.do/t/topic/486595
https://blog.xiny.cc/archives/q55XfpeW
11 条评论
我知道怎么搞了,只是项目上游没有codeload.github.com这个域名的设置,能分享一下吗?
我记得有啊,不过我很早就没关注了,自己留一下他们的动态
customer-stories-feed.github.com还有这个域名的设置
是不是去用宝塔的反向代理也可以?
只要是nginx都可以,具体请看项目上游
上面server的那些代码放在Nginx的哪个文件里?
用宝塔的反向代理不能登录。还有在宝塔安装Nginx后还能再做这样的反向代理吗?
请参考项目上游
不能再见啊!很好用的。或者写个教程怎么搭建啊。这么好的东西不能失传啊
感谢!
不错