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

Wikipedia全域恢复访问指南

发表在 技术 分类,已有 0 条评论,总计 234 次阅读

在所有之前的

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

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

Wikipedia-logo-v2@2x


Wikipedia 全域恢复访问指南

本文主要参考自 神代綺凜 - 真·反代P站恢复直接访问指南Mashiro - PIXIV网页版及客户端访问恢复指南 ,我只是站在了巨人的肩膀上才能手抵星辰。

准备工作

  1. 境外主机或 VPS
  2. 属于你自己的域名,也就是可以自由设置 DNS 解析记录的域名
  3. 与你域名相符的并且支持通配符的 SSL 证书,如 Let's Encrypt

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

需要使用的域及其 DNS 解析记录

现在假定你将使用一个正在使用的域名,并且不想影响该域名的其他服务,那么你应该使用三级域domain.example.com,下文均以wiki.example.com作为示例,请灵活替换。

你需要添加以下域的 DNS 解析记录:

wiki.example.com
*.wiki.example.com
*.wiki-m.example.com
*.wikimedia.example.com

开始配置工作

注意:这里我不阐述 SSL 证书的获取以及后文将要使用的 Nginx 服务器的编译及安装过程。

Nginx 服务器的配置

将以下内容灵活替换后作为 Nginx 的虚拟主机文件,这里使用三级域wiki.example.com作为示例。
#--------------------------------------------------------
#-    _       __   ___   ____         WikiMirror        -
#-   / \   _ _\ \ / (_) / ___|  ___ _ ____   _____ _ __ -
#-  / _ \ | '_ \ V /| | \___ \ / _ \ '__\ \ / / _ \ '__|-
#- / ___ \| | | | | | |  ___) |  __/ |   \ V /  __/ |   -
#-/_/   \_\_| |_|_| |_| |____/ \___|_|    \_/ \___|_|   -
#--------------------------------------------------------
server {
    listen       443 ssl http2;
    server_name  ~^([^.]+)\.wiki.example\.com$;

#这里是 SSL 证书配置块,请根据自己的实际情况调整,在下个 server 块将省略。
    ssl_certificate            /root/ca/ecc.fullchain.example.com.crt;
    ssl_certificate_key        /root/ca/ecc.example.com.key;
    ssl_ciphers                ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers  on;
    ssl_protocols              TLSv1.2 TLSv1.3;
    ssl_session_cache          shared:SSL:10m;
    ssl_session_tickets        on;
    ssl_session_timeout        1d;
    ssl_stapling               on;
    ssl_stapling_verify        on;
    ssl_trusted_certificate    /root/ca/ecc.fullchain.example.com.crt;
    add_header                 Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header                 X-Content-Type-Options nosniff;
    add_header                 X-Xss-Protection "1; mode=block";
#这里是 SSL 证书配置块,请根据自己的实际情况调整,在下个 server 块将省略。

    client_max_body_size  0;
    set                   $domain $1;
    resolver              8.8.8.8;

    if ($http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT\-)|(SonyEricsson)|(NEC\-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi\-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG\-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC\-)|(SED\-)|(EMOL\-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)") {
        rewrite ^/(.*) https://$domain.wiki-m.example.com$request_uri? redirect;
    }

#这里阻止搜索引擎蜘蛛收录站点,请不要去掉,在下个 server 块将省略,但不要忘记在各个 server 块加上。
    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|^$") {
        return 403;
    }
#这里阻止搜索引擎蜘蛛收录站点,请不要去掉,在下个 server 块将省略,但不要忘记在各个 server 块加上。

    location ~ .* {
        proxy_pass           https://$domain.wikipedia.org;
        proxy_cookie_domain  wikimedia.org wikimedia.example.com;
        proxy_cookie_domain  wikipedia.org wiki.example.com;
        proxy_cookie_domain  m.wikipedia.org wiki-m.example.com;
        proxy_redirect       https://$domain.wikipedia.org/ /;
        proxy_set_header     Accept-Encoding "";
        proxy_set_header     Host $domain.wikipedia.org;
        proxy_set_header     Referer $http_referer;
        proxy_set_header     User-Agent $http_user_agent;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header     X-Forwarded-Proto https;
        proxy_set_header     X-Real-IP $remote_addr;
        sub_filter           "login.wikimedia.org" "login.wikimedia.anyi.in";
        sub_filter           "meta.wikimedia.org" "meta.wikimedia.anyi.in";
        sub_filter           "upload.wikimedia.org" "upload.wikimedia.anyi.in";
        sub_filter           ".wikipedia.org" ".wiki.example.com";
        sub_filter_once      off;
        sub_filter_types     *;
    }
}

server {
    listen       443 ssl http2;
    server_name  wiki.example.com;

    client_max_body_size  0;
    resolver              8.8.8.8;

    if ($http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT\-)|(SonyEricsson)|(NEC\-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi\-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG\-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC\-)|(SED\-)|(EMOL\-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)") {
        rewrite ^/(.*) https://wiki-m.example.com$request_uri? redirect;
    }

    location / {
        proxy_pass           https://www.wikipedia.org;
        proxy_cookie_domain  wikimedia.org wikimedia.example.com;
        proxy_cookie_domain  wikipedia.org wiki.example.com;
        proxy_cookie_domain  m.wikipedia.org wiki-m.example.com;
        proxy_redirect       https://www.wikipedia.org/ /;
        proxy_set_header     Accept-Encoding "";
        proxy_set_header     Host www.wikipedia.org;
        proxy_set_header     Referer $http_referer;
        proxy_set_header     User-Agent $http_user_agent;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header     X-Forwarded-Proto https;
        proxy_set_header     X-Real-IP $remote_addr;
        sub_filter           "login.wikimedia.org" "login.wikimedia.anyi.in";
        sub_filter           "meta.wikimedia.org" "meta.wikimedia.anyi.in";
        sub_filter           "upload.wikimedia.org" "upload.wikimedia.anyi.in";
        sub_filter           ".wikipedia.org" ".wiki.example.com";
        sub_filter_once      off;
        sub_filter_types     *;
    }
}

server {
    listen       443 ssl http2;
    server_name  www.wiki.example.com;

    rewrite ^ https://wiki.example.com$request_uri? redirect;
}

server {
    listen       443 ssl http2;
    server_name  ~^([^.]+)\.wiki-m.example\.com$;

    client_max_body_size  0;
    set                   $domain $1;
    resolver              8.8.8.8;

    if ($http_user_agent !~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT\-)|(SonyEricsson)|(NEC\-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi\-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG\-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC\-)|(SED\-)|(EMOL\-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)") {
        rewrite ^/(.*) https://$domain.wiki.example.com$request_uri? redirect;
    }

    location ~ .* {
        proxy_pass           https://$domain.wikipedia.org;
        proxy_cookie_domain  wikimedia.org wikimedia.example.com;
        proxy_cookie_domain  wikipedia.org wiki.example.com;
        proxy_cookie_domain  m.wikipedia.org wiki-m.example.com;
        proxy_redirect       https://$domain.m.wikipedia.org/ /;
        proxy_set_header     Accept-Encoding "";
        proxy_set_header     Host $domain.m.wikipedia.org;
        proxy_set_header     Referer $http_referer;
        proxy_set_header     User-Agent $http_user_agent;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header     X-Forwarded-Proto https;
        proxy_set_header     X-Real-IP $remote_addr;
        sub_filter           "login.wikimedia.org" "login.wikimedia.anyi.in";
        sub_filter           "meta.wikimedia.org" "meta.wikimedia.anyi.in";
        sub_filter           "upload.wikimedia.org" "upload.wikimedia.anyi.in";
        sub_filter           ".wikipedia.org" ".wiki-m.example.com";
        sub_filter_once      off;
        sub_filter_types     *;
    }
}

server {
    listen       443 ssl http2;
    server_name  wiki-m.example.com;

    client_max_body_size  0;
    resolver              8.8.8.8;

    if ($http_user_agent !~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT\-)|(SonyEricsson)|(NEC\-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi\-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG\-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC\-)|(SED\-)|(EMOL\-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)") {
        rewrite ^/(.*) https://wiki.example.com$request_uri? redirect;
    }

    location / {
        proxy_pass           https://www.wikipedia.org;
        proxy_cookie_domain  wikimedia.org wikimedia.example.com;
        proxy_cookie_domain  wikipedia.org wiki.example.com;
        proxy_cookie_domain  m.wikipedia.org wiki-m.example.com;
        proxy_redirect       https://www.wikipedia.org/ /;
        proxy_set_header     Accept-Encoding "";
        proxy_set_header     Host www.wikipedia.org;
        proxy_set_header     Referer $http_referer;
        proxy_set_header     User-Agent $http_user_agent;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header     X-Forwarded-Proto https;
        proxy_set_header     X-Real-IP $remote_addr;
        sub_filter           "login.wikimedia.org" "login.wikimedia.anyi.in";
        sub_filter           "meta.wikimedia.org" "meta.wikimedia.anyi.in";
        sub_filter           "upload.wikimedia.org" "upload.wikimedia.anyi.in";
        sub_filter           ".wikipedia.org" ".wiki-m.example.com";
        sub_filter_once      off;
        sub_filter_types     *;
    }
}

server {
    listen       443 ssl http2;
    server_name  www.wiki-m.example.com;

    rewrite ^ https://wiki-m.example.com$request_uri? redirect;
}

server {
    listen       443 ssl http2;
    server_name ~^([^.]+)\.wikimedia\.example\.com$;

    client_max_body_size  0;
    set                   $domain $1;
    resolver              8.8.8.8;

    location ~ .* {
        proxy_pass           https://$domain.wikimedia.org;
        proxy_cookie_domain  wikimedia.org wikimedia.example.com;
        proxy_redirect       https://$domain.wikimedia.org/ /;
        proxy_set_header     Accept-Encoding "";
        proxy_set_header     Host $domain.wikimedia.org;
        proxy_set_header     Referer $http_referer;
        proxy_set_header     User-Agent $http_user_agent;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header     X-Forwarded-Proto https;
        proxy_set_header     X-Real-IP $remote_addr;
        sub_filter           "login.wikimedia.org" "login.wikimedia.anyi.in";
        sub_filter           "meta.wikimedia.org" "meta.wikimedia.anyi.in";
        sub_filter           "upload.wikimedia.org" "upload.wikimedia.anyi.in";
        sub_filter_once      off;
        sub_filter_types     *;
    }
}

server {
    listen       80;
    server_name  ~^([^.]+)\.example\.com$;
    server_name  ~^([^.]+)\.wiki.example\.com$;
    server_name  ~^([^.]+)\.wiki-m.example\.com$;
    add_header   X-Frame-Options "DENY";

    rewrite ^ https://$http_host permanent;
}

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

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

虽然使用 Cloudflare 等 CDN 服务可以隐藏真实 IP 并可以不用在意源服务器是否支持 HTTPS,但请注意,Cloudflare 是不支持泛域名下的 CDN 记录的,并且也不支持四级域的 SSL 证书。这意味着你只能隐藏主站的真实 IP,即三级域wiki.example.com。显而易见,它的作用很有限。

写在最后

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

附上我使用的nginx.conf配置节选,参考运用,会获得更好的性能(或许

events {
        accept_mutex  off;
        multi_accept  on;
        use           epoll;
}

http {
        client_header_buffer_size      4k;
        default_type                   application/octet-stream;
        keepalive_timeout              65;
        send_timeout                   10s;
        sendfile                       on;
        tcp_nodelay                    on;
        tcp_nopush                     on;
        types_hash_max_size            2048;
        server_tokens                  off;
        server_names_hash_bucket_size  64;
        server_name_in_redirect        off;
        ssl_protocols                  TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers      on;

        gzip on;
        gzip_comp_level  6;
        gzip_buffers     32 4k;
        gzip_disable     "msie6";
        gzip_min_length  1024;
        gzip_static      on;
        gzip_types       application/json application/x-font-ttf application/x-httpd-php application/x-javascript application/xml application/xml+rss application/vnd.ms-fontobject font/opentype image/jpeg image/gif image/png image/svg+xml image/x-icon text/css text/javascript text/plain text/xml;
        gzip_vary        on;

        open_file_cache_errors    on;
        open_file_cache           max=100000 inactive=20s;
        open_file_cache_min_uses  2;
        open_file_cache_valid     30s;
}

通过我给出的配置,你可以获得 MySSL 的 A+ 级评价,具有 TLS1.3HTTP2HSTSGzip等新特性。

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


如果你恰巧阅读到了这篇指南,并有通过搜索引擎解决不了的问题,欢迎在下方评论。

本文头图:ほぼゆかれいむ
评论已关闭