技术解析

反向代理中文维基百科(包含手机版页面)
0
2021-05-25 12:11:18
idczone

前阵子在 vps 上弄了一个中文维基百科的反向代理,但是一直存在手机端不能用的问题(会跳转到手机版的维基百科)。刚刚终于把这个问题解决掉了: https://w.sxisa.org
https 的证书是用的 Let's Encrypt
下面是 nginx 的配置:

server {
  server_name w.sxisa.org;
  listen 80;
  rewrite ^/(.*) https://$server_name/$1 permanent;
}

server {
  server_name w.sxisa.org;
  listen 443;

  ssl on;
  ssl_certificate      证书;
  ssl_certificate_key  证书;

  location / {
    proxy_pass https://zh.wikipedia.org;
    proxy_buffering off;

    proxy_cookie_domain zh.wikipedia.org w.sxisa.org;
    proxy_redirect https://zh.wikipedia.org/ /;
    proxy_redirect https://zh.m.wikipedia.org/ https://m.w.sxisa.org/;

    proxy_set_header X-Real_IP $remote_addr;
    proxy_set_header User-Agent $http_user_agent;
    proxy_set_header Accept-Encoding ''; 
    proxy_set_header referer "https://zh.wikipedia.org$request_uri";

    subs_filter_types text/css text/xml text/javascript;
    subs_filter '维基百科' '创软维基百科镜像';
    subs_filter zh.wikipedia.org w.sxisa.org;
    subs_filter upload.wikimedia.org up.w.sxisa.org;
    subs_filter zh.m.wikipedia.org国外服务器 m.w.sxisa.org;
  }
  location https://zh.m.wikipedia.org/{
    rewrite ^/(.*) https://m.w.sxisa.org/$1 permanent;
  }
}

server {
  server_name m.w.sxisa.org;
  listen 80;
  rewrite ^/(.*) https://$server_name/$1 permanent;
}

server {
  server_name m.w.sxisa.org;
  listen 443;

  ssl on;
  ssl_certificate      证书;
  ssl_certificate_key  证书;

  location / {
    proxy_pass https://zh.m.wikipedia.org;
    proxy_buffering off;

    proxy_redirect https://zh.m.wikipedia.org/ /;
    proxy_cookie_domain zh.m.wikipedia.org m.w.sxisa.org;

    proxy_set_header X-Real_IP $remote_addr;
    proxy_set_header User-Agent $http_user_agent;
    proxy_set_header Accept-Encoding ''; 
    proxy_set_header referer "https://zh.m.wikipedia.org$request_uri";

    subs_filter_types text/css text/xml text/javascript;
    subs_filter '维基百科' '创软维基百科镜像';
    subs_filter zh.wikipedia.org w.sxisa.org;
    subs_filter zh.m.wikipedia.org m.w.sxisa.org;
    subs_filter upload.wikimedia.org up.w.sxisa.org;
  }
}

server {
  server_name up.w.sxisa.org;
  listen 80;
  rewrite ^/(.*) https://$server_name/$1 permanent;
}

erver {
  server_name up.w.sxisa.org;
  listen 443;

  ssl on;
  ssl_certificate      证书;
  ssl_certificate_key  证书;

  location / {
    proxy_pass https://upload.wikimedia.org;
    proxy_cookie_domain upload.wikimedia.org up.w.sxisa.org;
    proxy_buffering off;
    proxy_set_header X-Real_IP $remote_addr;
    proxy_set_header User-Agent $http_user_agent;
    proxy_set_header referer "https://upload.wikimedia.org$request_uri";
  }
}

我也反代了一个,手机版貌似也有问题,就没管

做一个通用反代规则就可以了,所以网站自动反代

手机浏览器拦截了,报告隐私风险。

https://m.w.sxisa.org/wiki/Wikipedia:%E5%85%B3%E4%BA%8E

最下面的 server 前面少了一个字母 s

过断 mark 赞

难道证书不认?
哈~可能贴上来不小心删到了。
好像可行,回头试试。

期待楼主对所有语言的反代

https://m.w.sxisa.org/wiki/%E6%96%B0%E9%98%B6%E7%BA%A7

感觉中文版只是 DNS 污染,换个 DNS 就能访问了。

用 hosts 确实可以访问,不过图片不知道为啥看不了。

图片用的域名也得改 host ,不过改个 DNS 就一劳永逸了。

DNSᴄʀʏᴘᴛ 无压力

multy subs_filter 似乎是 1.9.3 以后才支持

为何不直接上数据库做镜像。

nginx version: nginx/1.9.3
测试了一下,图片不能正确显示,我看楼主的图片可以正常显示,不知道是什么原因。

找到原因了,我的 wildcard 只能对*.xxx.org 有效,对 up.w.xxx.org 不能识别为安全连接

这是什么字符?ᴀ ʙ ᴄ ᴅ ᴇ ғ ɢ ʜ ɪ ᴊ ᴋ ʟ ᴍ ɴ ᴏ ᴘ ǫ ʀ s ᴛ ᴜ ᴠ ᴡ x ʏ ᴢ

这是小型大写字母, Unicode 里面有独立的字符,但有些字体可以用 OpenType 变换出来。

https://en.wikipedia.org/wiki/Small_caps

手机版 502 了

全站 404 了

https://github.com/imlinhanchao/ngx_proxy_wiki 所有语言的反代。(时隔多年,终于填坑

怎么改 DNS ?

网上搜一下公共 DNS

换什么 DNS 呢?

感觉很多 DNS 都不咋地

在吗?

数据地带为您的网站提供全球顶级IDC资源