之前的一个项目,后面可能是加太多站点访问太多然后暴毙了
镜像代码感谢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>';
}
}

Comments NOTHING