Wikidot站点镜像服务配置

HW 发布于 8 天前 43 次阅读 预计阅读时间: 7 分钟


之前的一个项目,后面可能是加太多站点访问太多然后暴毙了

镜像代码感谢AndyBlocker在ajax上的指导

可以网站目录新建.conf文件,然后在配置文件下用include插入代码

include 路径/mirror.conf; 

代码以镜像 backrooms-wiki-cn.wikidot.com 到 backrooms-wiki-cn.wikidot.site 为例:

server {
    listen 443 ssl ;
    listen [::]:443 ssl ;
    http2 on;
    server_name backrooms-wiki-cn.wikidot.site;
    ssl_certificate 【SSL 证书路径】/fullchain.pem;
    ssl_certificate_key 【SSL 证书路径】/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    client_body_buffer_size 10M;
    client_max_body_size 10M;
    proxy_buffers 16 16k;
    proxy_buffer_size 32k;

    set_by_lua_block $upstream_referer {
        local r = ngx.var.http_referer
        if r then
            local new_r, n = string.gsub(r, "backrooms-wiki-cn.wikidot.site", "backrooms-wiki-cn.wikidot.com")
            return new_r
        else
            return "https://backrooms-wiki-cn.wikidot.com/"
        end
    }

    # 全局代理配置
    location / {
        proxy_pass https://backrooms-wiki-cn.wikidot.com;
        proxy_set_header Host backrooms-wiki-cn.wikidot.com;
        proxy_set_header Referer $upstream_referer;
        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 User-Agent $http_user_agent;
        
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # 重定向 www.wikidot.com 到 login.wikidot.site,如果需要
        proxy_redirect https://backrooms-wiki-cn.wikidot.com/ https://$host/;
        proxy_redirect https://www.wikidot.com/ https://login.wikidot.site/;  # 新增规则
        proxy_cookie_domain backrooms-wiki-cn.wikidot.com $host;
        
        # 替换响应中 www.wikidot.com 为镜像域名,如果需要
        sub_filter_types *;
        sub_filter_once off;
        sub_filter "backrooms-wiki-cn.wikidot.com" "backrooms-wiki-cn.wikidot.site";
        sub_filter "www.wikidot.com" "login.wikidot.site";
        
        set $wikidotsubdomain "backrooms-wiki-cn";
        include /www/wwwroot/wikidot.site/sub_filter.conf; 
    }

    # 专门处理Wikidot的AJAX请求
    location ~ ^/(ajax-|module-|rpc-|api-) {
        proxy_pass https://backrooms-wiki-cn.wikidot.com;
        proxy_set_header Host backrooms-wiki-cn.wikidot.com;
        proxy_set_header Referer $upstream_referer;
        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_pass_request_body on;
        proxy_pass_request_headers on;
        
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # 定向 www.wikidot.com 到镜像域名
        proxy_redirect https://backrooms-wiki-cn.wikidot.com/ https://$host/;
        proxy_redirect https://www.wikidot.com/ https://login.wikidot.site/;  # 新增规则
        proxy_cookie_domain backrooms-wiki-cn.wikidot.com $host;
        
        # 替换响应中 www.wikidot.com 为镜像域名
        sub_filter_types *;
        sub_filter_once off;
        sub_filter "backrooms-wiki-cn.wikidot.com" "backrooms-wiki-cn.wikidot.site";
        sub_filter "www.wikidot.com" "login.wikidot.site";
    }
}

需要隐藏登录选项的话,可以新建 sub_filter.conf 再include:

sub_filter "<a href=\"javascript:;\" onclick=\"WIKIDOT.page.listeners.createAccount(event)\" class=\"login-status-create-account btn\">建立账户</a> <span>或</span> <a href=\"javascript:;\" onclick=\"WIKIDOT.page.listeners.loginClick(event)\" class=\"login-status-sign-in btn btn-primary\">登入</a> " 
"<div id=\"disable-login-btn\" style=\"color:gray;font-weight: bold;\" onclick=\"convertToLoginLink(this)\">登入功能已禁用</div>";


sub_filter "<a href=\"javascript:;\" onclick=\"WIKIDOT.page.listeners.createAccount(event)\" class=\"login-status-create-account btn\">Create account</a> <span>or</span> <a href=\"javascript:;\" onclick=\"WIKIDOT.page.listeners.loginClick(event)\" class=\"login-status-sign-in btn btn-primary\">Sign in</a> " 
"<div id=\"disable-login-btn\" style=\"color:gray;font-weight: bold;\" onclick=\"convertToLoginLink(this)\">登入功能已禁用</div>";


sub_filter "</body>" "
<script type=\"text/javascript\">
function customLoginClick(event) {
    var confirmMsg = '注意!在镜像站登入Wikidot站点可能存在风险\\n若非必要,建议仍通过原Wikidot站点进行登入操作\\n若出现任何账号丢失等现象,均与本镜像站无关!';
    if (confirm(confirmMsg)) {
        WIKIDOT.page.listeners.loginClick(event);
    } else {
        event.preventDefault();
        event.stopPropagation();
        return false;
    }
}

function convertToLoginLink(divElement) {
    const loginLink = document.createElement('a');
    loginLink.href = 'javascript:;';
    loginLink.onclick = customLoginClick;
    loginLink.className = 'login-status-sign-in btn btn-primary';
    loginLink.textContent = '登入';
    divElement.parentNode.replaceChild(loginLink, divElement);
}
</script>
</body>";

sub_filter "<div id=\"action-area-top\"></div>" 
"<div id=\"action-area-top\"><div style=\"background-color: rgb(152 229 255); padding: 1rem; margin-bottom: 1rem; border-radius: 1rem; color: black;\">本站为镜像站,仅供无法阅览源站点的用户使用。一切以<a href=\"https://$wikidotsubdomain.wikidot.com$uri\" style=\"color: #b01;\">源站点</a>为主</div></div>";

登录页面,以 www.wikidot.com 镜像到 login.wikidot.site 为例:


server {
    listen 80;
    listen [::]:80;
    server_name login.wikidot.site;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name login.wikidot.site;

    ssl_certificate 【SSL 证书路径】/fullchain.pem;
    ssl_certificate_key 【SSL 证书路径】/privkey.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;

    client_body_buffer_size 50M;
    client_max_body_size 50M;
    proxy_buffers 32 32k;
    proxy_buffer_size 64k;
    proxy_busy_buffers_size 128k;



    set_by_lua_block $upstream_referer {
        local r = ngx.var.http_referer or ''
        r = string.gsub(r, "login.wikidot.site", "www.wikidot.com")
        r = string.gsub(r, "brsandbox-pro.wikidot.site", "brsandbox-pro.wikidot.com")
        return r ~= '' and r or 'https://www.wikidot.com/'
    }

    

    location ^~ /onesignal/ {
        proxy_pass https://www.wikidot.com;
        proxy_set_header Host www.wikidot.com;
        proxy_set_header Referer $upstream_referer;
        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 User-Agent $http_user_agent;
        proxy_set_header Cookie $http_cookie;

        sub_filter_types "";
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;

        proxy_cookie_domain .brsandbox-pro.wikidot.com .brsandbox-pro.wikidot.site;
        proxy_cookie_domain .wikidot.com .brsandbox-pro.wikidot.site;
        proxy_cookie_path / /;
        proxy_cookie_flags ~ secure httponly samesite=none;

        proxy_redirect https://www.wikidot.com/ https://$host/;
        proxy_redirect https://brsandbox-pro.wikidot.com/ https://brsandbox-pro.wikidot.site/;
    }

    # 登录代理
    location / {

        proxy_pass https://www.wikidot.com;
        proxy_set_header Host www.wikidot.com;
        proxy_set_header Referer $upstream_referer;
        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 User-Agent $http_user_agent;
        proxy_set_header Cookie $http_cookie;
        
        # 超时配置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # Cookie处理(嘶我这里好像当时为了沙盒才写的brsandbox-pro,但是好像又是全都可以?可以自己改下成自己站点)
        proxy_cookie_domain .wikidot.com .wikidot.site;
        proxy_cookie_domain .brsandbox-pro.wikidot.com .brsandbox-pro.wikidot.site;
        proxy_cookie_flags ~ secure httponly samesite=none;

        # 登录跳转关键规则
        proxy_redirect https://www.wikidot.com/ https://$host/;
        proxy_redirect https://brsandbox-pro.wikidot.com/ https://brsandbox-pro.wikidot.site/;
        proxy_redirect https://www.wikidot.com/brsandbox-pro.wikidot.com https://brsandbox-pro.wikidot.site;

        # 内容替换
        sub_filter_types *;
        sub_filter_once off;
        sub_filter "www.wikidot.com" "login.wikidot.site";
        sub_filter ".wikidot.com" ".wikidot.site";
        sub_filter 'action="/' 'action="https://$host/';
        sub_filter 'formaction="/' 'formaction="https://$host/';
        
        # 加内容,如果需要
        # sub_filter '<div class="login-paths"> ' '<div class="login-paths"><div style="background-color: rgb(152 229 255); padding: 1rem; margin-bottom: 1rem; border-radius: 1rem; color: black;">此处镜像登录可能存在登录后重定向回原Wikidot站点的错误,此为正常现象<br>若出现此类现象,您可以关闭重定向后的页面,并刷新原.wikidot.site镜像站点</div>';
    }
}

此作者没有提供个人介绍。
最后更新于 2026-05-25