清科谷体的博客

  • 文章
  • 关于
  • 联系
  • 隐私政策

  1. 首页
  2. 建站
  3. 正文

一个适用于所有网站的通用镜像站

2025年12月23日 59点热度 0人点赞 0条评论

我用Nginx搭建了支持大部分网站的通用的镜像网站。

示例:https://github-com.ingke.net/trending 访问 Github

将要访问的网站域名的点改成小横杆,然后加上.ingke.net就好

更多例子:

https://zh-wikipedia-org.ingke.net/wiki/

https://dmhy-org.ingke.net/

https://rule34-xxx.ingke.net/

https://wnacg-com.ingke.net/

Nginx配置文件

对于大多数网站中任何 HTML / JS / CSS / 文本里出现的 URL 都会被替换成代理域

会改写

<a href>

<img src>

<script src>

<link href>

JS 字符串里的 https://xxx

CSS 里的 url(...)

对于有些网站这样会导致样式丢失,比如github就是这样。于是只改写 <a href>,页面资源全部直连原站。有的网站如果不全部改写样式也会丢失,比如Bilibili。后者更常见,于是在白名单的网站只改写<a href> 的链接。

# HTTP 重定向到 HTTPS
server {
    listen 80;
    # ingke.net换成自己的域名
    server_name ~^(?[^.]+)\.ingke\.net$;
    
    # 重定向所有 HTTP 请求到 HTTPS
    return 301 https://$host$request_uri;
}

# HTTPS 代理服务器
server {
    listen 443 ssl http2;
    # ingke.net换成自己的域名
    server_name ~^(?[^.]+)\.ingke\.net$;
    
    # SSL 证书配置
    ssl_certificate /www/server/panel/vhost/ssl/ingke.net/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/ssl/ingke.net/privkey.pem;
    
    # SSL 优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 10s;
    
    access_log /var/log/nginx/proxy_access.log;
    error_log /var/log/nginx/proxy_error.log info;
    
    location / {
        set_by_lua_block $backend_host {
            local subdomain = ngx.var.subdomain
            local real_host = subdomain:gsub("-", ".")
            return real_host
        }
        
        proxy_pass https://$backend_host;
        proxy_ssl_server_name on;
        proxy_ssl_protocols TLSv1.2 TLSv1.3;
        proxy_ssl_verify off;
        
        proxy_set_header Host $backend_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 https;
        proxy_set_header Accept-Encoding "";
        
        proxy_redirect off;
        proxy_buffering off;
        
        header_filter_by_lua_block {
            local host = ngx.var.backend_host
            -- 白名单:只改 
            local whitelist = {
                ["github.com"]  = true,
            }

            local strategy = "full_rewrite"
            for domain, _ in pairs(whitelist) do
                if host == domain or host:match("%." .. domain .. "$") then
                    strategy = "rewrite_a"
                    break
                end
            end

            ngx.ctx.strategy = strategy
        }
        
        body_filter_by_lua_block {
            local strategy = ngx.ctx.strategy
            local chunk = ngx.arg[1]
            if not chunk or chunk == "" then
                return
            end
            ------------------------------------------------
            -- A. 白名单站点:只改 
            ------------------------------------------------
            if strategy == "rewrite_a" then
                chunk = chunk:gsub(
                    '(<a%s+[^>]*href=["\'])(https?://)([^/"\']+)([^"\']*)(["\'])',
                    function(prefix, scheme, domain, path, suffix)
                        -- 已经是代理域名,不处理
                        if domain:match("%.ingke%.net$") then
                            return prefix .. scheme .. domain .. path .. suffix
                        end

                        -- IP 地址不处理
                        if domain:match("^%d+%.%d+%.%d+%.%d+$") then
                            return prefix .. scheme .. domain .. path .. suffix
                        end

                        -- 真实域名 → 代理域名
                        local proxy_domain = domain:gsub("%.", "-") .. ".ingke.net"
                        return prefix .. "https://" .. proxy_domain .. path .. suffix
                    end
                )

                ngx.arg[1] = chunk
                return
            end

            ------------------------------------------------
            -- B. 默认策略:全量改写
            ------------------------------------------------
            chunk = chunk:gsub('(https?)://([a-zA-Z0-9][a-zA-Z0-9%-%.]*[a-zA-Z0-9])([/:?#%[%]])', function(scheme, domain, separator)
                if domain:match("%.ingke%.net$") then
                    return "https://" .. domain .. separator
                end
                
                if domain:match("^%d+%.%d+%.%d+%.%d+") then
                    return scheme .. "://" .. domain .. separator
                end
                
                local proxy_domain = domain:gsub("%.", "-") .. ".ingke.net"
                return "https://" .. proxy_domain .. separator
            end)
                
            chunk = chunk:gsub('(https?)://([a-zA-Z0-9][a-zA-Z0-9%-%.]*[a-zA-Z0-9])(["\'><%s])', function(scheme, domain, terminator) if domain:match("%.ingke%.net$") then return "https://" .. domain .. terminator end if domain:match("^%d+%.%d+%.%d+%.%d+") then return scheme .. "://" .. domain .. terminator end local proxy_domain = domain:gsub("%.", "-") .. ".ingke.net" return "https://" .. proxy_domain .. terminator end) chunk = chunk:gsub('//([a-zA-Z0-9][a-zA-Z0-9%-%.]*[a-zA-Z0-9])([/:?#"\'><%s%[%]])', function(domain, separator)
                if domain:match("%.ingke%.net$") then
                    return "//" .. domain .. separator
                end
                
                if domain:match("^%d+%.%d+%.%d+%.%d+") then
                    return "//" .. domain .. separator
                end
                
                local proxy_domain = domain:gsub("%.", "-") .. ".ingke.net"
                return "https://" .. proxy_domain .. separator
            end)
                
            ngx.arg[1] = chunk
        }
    }
}
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Http Linux Nginx 反向代理 网络
最后更新:2025年12月25日

ingker

自娱自乐

点赞
< 上一篇

文章评论

取消回复

COPYRIGHT © 2026 清科谷体's blog. ALL RIGHTS RESERVED.
THEME KRATOS MADE BY VTROIS | MODIFIED BY INGKER

正在加载今日诗词....

本站已运行