解决了一年前的我没法处理的世纪难题(x

刻骨铭心意识到,许多之前自身觉得难解的难题并并不是确实难解,仅仅自身的知识层面不足而没法意识到难题的关键所属而已。

小结起來就一个字:菜

Head Pic: 「Halloween」/「鳥成」のイラスト [pixiv]

序言

文中上述的全部內容仅作学习交流,切勿具体作出一切违背中国法律的个人行为!

此计划方案为确实反代,而不是在当地反代以绕开 SNI 核查的方式(Mashiro - PIXIV网页版及手机客户端浏览修复手册)

准备工作

一台没被P站屏蔽掉的服务器

大家都知道 Vultr 绝大多数IP段都被P站屏蔽掉

一个船新的网站域名

实际上随便啦,用自身网站域名的二级来弄也可,仅仅网站域名会越来越较为长

事后均至今代指大家应用的网站域名,请灵气代用

应用“不用根据认证网站文档来审签/继签”而且最好是还适用泛域名的 SSL 资格证书

这儿大家当然首先推荐 Let's Encrypt,它是看上去唯一合乎全部要求而且还完全免费的资格证书

网站域名及资格证书

必须应用什么域?

在反代时大家必须采用下列好多个域

要是你愿意应用一个船最新域名专业反代:

example.com

随便,你能放点自身的物品做一些掩藏或是表明,或是立即 301 到

*.example.com

用以反代两端对齐

*.pximg.example.com

用以反代两端对齐,实际上该网站域名中的还可以换成别的的字符串数组,要是不与P站的二级域名服务项目造成矛盾就可以

假如你要用一个自身已经应用的网站域名反代而且不愿危害该网站域名的别的服务项目:

分别功效跟上面一样,在事后配备上灵气改动就可以

获得资格证书

要是你愿意套 CloudFlare,你能绕过这一节

应用 acme 的 DNS API 方法开展挑戰认证来审签资格证书是最便捷的

参照下列文章内容

在配备好 API 以后大家应用那样的指令就可以审签一个大家要想的三网站域名合一的资格证书了,而且还能全自动继签,岂不美哉

Nginx

基本配备

这儿仅列举重要配备,一般配备比如、、及其 SSL 这类的不容易写成,填加

详细说明

server_name 与 set

应用正则表达式配对以便捷立即获取出我们要反代的二级域名

resolver

必需,特定解析域名常用 DNS,由于在事后中我们要反代的域名是由决策,自身是不确定的,Nginx 务必被特定 DNS 才可以解决解析域名

proxy_cookie_domain

更改反代后回到的 header 中 set-cookie 里 cookie 相匹配的网站域名,只先在必须,是处理登录难题的重要,如想掌握事后文章发表表述

proxy_ssl_server_name

因为 P 站刚开始上 CF 了,其 TLS 开启了 SNI,因而务必特定该项为,不然会挥手不成功

proxy_set_header Referer

设定 header 中的 Referer,关键目地是处理的防盗链难题,及其的一部分 API 的 Referer 认证难题

proxy_set_header Accept-Encoding

将接纳的缩小编号设成空,即不接纳缩小,由于没法对缩小过的內容见效

proxy_redirect

将回到原站 302 的恳求开展跳转

sub_filter

将反代后获得的內容开展字符串替换,以确保连接网站域名等与反代网站域名一致

sub_filter_types

务必设定为,不然默认设置针对 API 回到的 json 內容等不容易开展更换,会造成 借助 ajax 运行的一些作用的出现异常

提高隐秘性(提议)

避免被百度搜索引擎百度收录

在 Nginx 配备中往每一个 server 加上此句

请加进这句话以后,由于该配备也应用了正则表达式,会造成 更改

严禁内地外IP浏览

因为反代P站的受众群体只将会为内地内客户,因而大家彻底能够 严禁内地外IP浏览反代站,另外还能避免P站检验举报

但一定要注意,这一计划方案是对这一整台 VPS 的与端口号起效,这代表着你假如另外在 VPS 上布局了别的网站,她们也将没法被内地外客户浏览

假如必须仅对反代网站起效,请自主百度搜索参照“nginx geoip”,或是应用后边上述的套 CloudFlare 的方法

参照流程:

安裝 ipset

建立一个 ipset 并加上内地IP做为授权管理

载入服务器防火墙标准(次序十分关键,请不要更改实行次序)

套 CloudFlare

除开所述计划方案外,自己是套了层 CloudFlare,并设定了服务器防火墙标准来阻拦非中国及其百度搜索引擎网络爬虫浏览

那样有一个优势,一是 SSL 资格证书全是 Cloudflare 全自动审签和续签的,因而应用 Flexible SSL 选择项,随后源反代站就不用操劳资格证书的事了,立即应用 HTTP;二是 Cloudflare 的服务器防火墙能够 完成上边提及的屏蔽掉中国 IP 及其百度搜索引擎的作用,不用自身去维护保养

自然那样是有缺陷的,便是设定 DNS 纪录

Cloudflare CDN 是不兼容设定泛域名纪录的

因而大家只有一条一条纪录加,初次布署真是是要了命,下列列举域名作用有关网站域名:

别的的比如小说集、直播间等等我本人应用頻率很低因此我不考虑到了,自然假如给你要求就自身找网站域名吧(

局限

不可以应用关联的社交媒体账户的登陆方法

账号将会会出現必须 reCAPTCHA 认证造成 无法登录,难解,只有自身将原站已登陆的 cookie 导出来,更换网站域名,随后导进反代站来开展登陆

将会存有并未发觉的难题

处理登录难题的重要

这个问题困惑我一年了,之前我试着反代的情况下,登陆会提醒“失效的网络服务器”而无法登陆,直至近期才发觉真实缘故

我根据百度搜索引擎搜索了许多文章内容,直至遇上了这篇

仿真模拟登陆pixiv.net事后 - ことりのおやつにしてやるぞー!

以前我觉得,登陆时唯一要留意的仅有,而编码中的获得 cookie 的实际操作提示了我,我的判断力跟我说登录失败是跟 cookie 相关

因此我又翻阅了一下 GET 网页登陆时的 header,原来是有 set-cookie 的,可是我以前一直从登陆有关 js 的实际操作下手因而沒有注意到这一关键点

依据这一构思我尝试自身用 Nodejs 写了个仿真模拟登陆来试着

回到內容与回到 header 中的 set-cookie:

值得庆贺,换句话说的确是 cookie 的锅

精确地说是由于 sub_filter 只有更换 response 中的內容,也没有想起 set-cookie 的 domain 因为是 ,不容易被一切体制全自动更换,与反代网站域名不一样,沒有 set 上,因而造成 传出登陆 POST 的情况下沒有带上上这一 cookie

知道难题关键所属,那麼解决方法当然也就不会太难想起了,历经检索我找到了 Nginx 官方网文本文档中有提及 proxy_cookie_domain

Syntax:

proxy_cookie_domain off;

proxy_cookie_domain domain replacement;

Default:

proxy_cookie_domain off;

Context: http, server, location

This directive appeared in version 1.1.15.

Sets a text that should be changed in the domain attribute of the "Set-Cookie" header fields of a proxied server response.

解决问题√

并且想不到处理方法竟这般简易,只不过加一行配备的事


【www.eternalriver.com】