Wikipedia全域恢复访问指南
发表于 ,已有 0 条评论,总计 313710 次阅读 | 点我进行简繁转换

Wikipedia全域恢复访问指南

发表于 | 已有 0 条评论,总计 313710 次阅读

在所有之前的

声明:本文仅为丰富知识的交流与学习途径,我不提供除 Wikipedia 以外的其他网站指导。
请勿在中国大陆公网上公开自己搭建的反代站点,您可能会有随时遭到审查的风险。如果您因为此种原因导致种种问题,我不负任何责任。

使用本文所描述的方法,你可以访问 Wikipedia 的所有站点、登录并编辑。那么,让我们开始吧。

Wikipedia-logo-v2\@2x


Wikipedia 全域恢复访问指南

**注意:**下文提到的演示站点所使用的配置已经和本文所描述的有着**巨大**差别,但本文依然是可用的方法之一。 > 本文所提供的**简易**配置虽然可以让您登录并编辑,但主要目的只是让您可以访问 Wikipedia,并在必要时进行简单的编辑。 > **请勿**直接将下文配置用于对外服务,页面文本(包括HTML、CSS、JS、JSON、XML甚至SVG等任何文本格式)会被一刀切地替换,用户在编辑时可能就会提交了被修改之后的文本。这最终会影响到 Wikipedia 的正常编者,希望您在对外服务时三思。

准备工作

  1. 网络环境良好的主机或 VPS
  2. 可自由设置 DNS 解析记录的域名
  3. 与域名相符并支持通配符的 SSL 证书

在后文中,均以example.com作为示例来反代访问 Wikipedia。

#### 需要使用的域及其 DNS 解析记录 你需要添加以下域的 DNS 解析记录: ```xml example.com(可选) *.example.com *.m.example.com ``` - example.com 用以跳转主站`www.example.com` - \*.example.com 用以反代对齐主站及各个语言分站`*.wikipedia.org` - \*.m.example.com 用以反代对齐各个语言分站移动版`*.m.wikipedia.org` ### 开始配置工作 下文仅列出反代所需的关键配置,其他内容请根据自己的实际情况调整。 对于 Nginx 的编译、安装及相关配置方法,SSL 证书的相关配置方法,均可以参考[本站的 Nginx 配置](https://blog.sukiu.net/p/better-nginx.html),对于 SSL 证书的申请方法,可以参考 [Deepzz - acme.sh 自动更新 RSA、ECC 双证书实践](https://deepzz.com/post/acmesh-letsencrypt-cert-auto-renew.html)。 #### Nginx 服务器的配置 > 将以下内容灵活替换后作为 Nginx 的虚拟主机文件,这里使用`example.com`作为示例。 ```nginx #-------------------------------------------------------- #- _ __ ___ ____ WikiMirror-Public - #- / \ _ _\ \ / (_) / ___| ___ _ ____ _____ _ __ - #- / _ \ | '_ \ V /| | \___ \ / _ \ '__\ \ / / _ \ '__|- #- / ___ \| | | | | | | ___) | __/ | \ V / __/ | - #-/_/ \_\_| |_|_| |_| |____/ \___|_| \_/ \___|_| - #-------------------------------------------------------- resolver 8.8.8.8 ipv6=on; server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; server_name ~^(?(login(?:\.m)?))\.example\.com$; add_header AnYi-Mirror-Site-Public "Config modified at 2021-08-09"; #阻止搜索引擎蜘蛛收录站点,建议在每个 server 块中加入。 if ($http_user_agent ~* "Bot|Spider|Barkrowler|BingPreview|Feedfetcher-Google|ia_archiver|libwww-perl|MBCrawler|Mediapartners-Google|MSNot-media|Python|Teoma|Yahoo! Slurp|^$") { return 444; } location / { proxy_pass https://$subdomain.wikimedia.org; client_header_buffer_size 4k; large_client_header_buffers 32 8k; proxy_buffers 32 32k; proxy_buffer_size 128k; proxy_busy_buffers_size 256k; proxy_cookie_domain ~(login(?:\.m)?)\.wikimedia\.org$ $1.example.com; proxy_cookie_domain wikipedia.org example.com; proxy_redirect ~^https?:\/\/(login(?:\.m)?)\.wikimedia\.org/(.*?)$ http://$1.example.com/$2; proxy_redirect ~^https?:\/\/([^.]+(?:\.m)?)\.wikipedia\.org/(.*?)$ http://$1.example.com/$2; proxy_set_header Accept-Encoding ""; proxy_set_header Host $subdomain.wikimedia.org; proxy_set_header Referer https://$proxy_host$request_uri; sub_filter "login.wikimedia.org" "login.example.com"; sub_filter "login.m.wikimedia.org" "login.m.example.com"; sub_filter ".wikipedia.org" ".example.com"; sub_filter_once off; sub_filter_types *; } } server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; server_name ~^(?[^.]+(?:\.m)?\.)?example\.com$; add_header AnYi-Mirror-Site-Public "Config modified at 2021-08-09"; location / { proxy_pass https://${subdomain}wikipedia.org; client_header_buffer_size 4k; large_client_header_buffers 32 8k; proxy_buffers 32 32k; proxy_buffer_size 128k; proxy_busy_buffers_size 256k; proxy_cookie_domain login.wikimedia.org login.example.com; proxy_cookie_domain login.m.wikimedia.org login.m.example.com; proxy_cookie_domain wikipedia.org example.com; proxy_redirect ~^https?:\/\/(login(?:\.m)?)\.wikimedia\.org/(.*?)$ http://$1.example.com/$2; proxy_redirect https://${subdomain}wikipedia.org/ https://${subdomain}example.com/; proxy_redirect ~^https?:\/\/([^.]+(?:\.m)?)\.wikipedia\.org/(.*?)$ http://$1.example.com/$2; proxy_set_header Accept-Encoding ""; proxy_set_header Host ${subdomain}wikipedia.org; proxy_set_header Referer https://$proxy_host$request_uri; sub_filter "login.wikimedia.org" "login.example.com"; sub_filter "login.m.wikimedia.org" "login.m.example.com"; sub_filter ".wikipedia.org" ".example.com"; sub_filter_once off; sub_filter_types *; } } ```

详见:https://github.com/AnYiEE/nginx-wikimirror

以上配置应用后,访问www.example.com即可看到 Wikipedia 主站首页。

使用 Cloudflare 等 CDN 服务隐藏真实 IP

使用 Cloudflare 等 CDN 服务可以隐藏真实 IP 并可以不用在意源服务器是否支持 HTTPS,但请注意,Cloudflare 是不支持泛域名下的 CDN 记录的,这意味着只能手动或使用 API 去添加所需站点的 DNS 解析记录(除主站外,维基百科有多达 298 个语言分站),想完全隐藏真实 IP,需要为每个语言分站添加“桌面版”与“移动版”的DNS解析记录。

如果使用 CDN 服务隐藏真实 IP,需将proxy_hide_header x-client-ip;添加至上述配置的 location 段中。

写在最后

授人以鱼不如授人以渔,但如果连鱼都没见过就要另当别论了。本文不是面向初次接触 Nginx 服务器的人而写的,如果照搬照抄,Nginx 服务器可是会丢你 Error 的(笑

我所做的只是一个抛砖引玉的工作,你可以利用这种方法,恢复访问 Wikibooks、Google Scholar 或是 Pixiv 等其他网站。


如果你恰巧阅读到了这篇指南,并有通过搜索引擎解决不了的问题,请使用邮件与我联系。

本文头图:ほぼゆかれいむ

Wikipedia全域恢复访问指南-二维码 本文二维码

评论已关闭