公元2022年的站点维护日志
例如:常用的header标头啊,一些基本的配置信息啊什么的
目录云彩面包饼干警长黑猫警长甜心格格樱桃小丸子洛克王国爱探险的朵拉果宝特工梦月精灵梦幻精灵之蛋糕甜心天线宝宝花园宝宝海绵宝宝哆啦a梦喜羊羊与灰太狼猫和老鼠电击小子快乐星球开心超人乐比悠悠樱桃小丸子蜡笔小新虹猫蓝兔七侠传神厨小福贵疯丫头小鲤鱼历险记奥特曼舒克贝塔小贝流浪记小糊涂神阿笨猫大草原上的小老鼠啄木鸟伍迪说一说你记忆当中的经典呗~感谢网易云音乐、哔哩哔哩的评论区、弹幕区网友。当然,还有底部评论区的可爱博友呐!
我给群友13.14元哎!大气的我!我自己以前从来没有白送过这么多钱。不过,说实话,送给群主的红包多是1块以下的,现在想想都觉得不太好……群主们……
1611753340.jpg前言本文所述的所有内容仅供交流学习,请勿实际做出任何违反国家法律的行为![warn]请不要在互联网上公开自己搭建的反代站,P 站可能会发邮件到您的主机商投诉。如果您因为此种原因导致 VPS 服务等被终止,本人不负任何责任。[/warn]准备工作一台没被P站屏蔽的主机(vps)众所周知 Vultr 大部分IP段都被P站屏蔽一个船新的域名其实随意啦,用自己域名的二级来弄也可,只是域名会变得比较长,且需要DNS商支持泛解析和三级域名解析后续均以example.com来指代我们使用的域名,请灵性代换使用“不需要通过验证站点文件来签发/续签”并且最好还支持泛域名的 SSL 证书这里我们自然首推 Let's Encrypt,这是看起来唯一符合所有需求并且还免费的证书域名及证书需要使用哪些域?在反代时我们需要用到以下几个域如果你愿意使用一个船新域名专门反代: example.com *.example.com *.pximg.example.com example.com随意,你可以放点自己的东西做一些伪装或者说明,或者直接 301 到www.example.com,最终使用的是www.example.com.*.example.com用于反代对齐*.pixiv.net*.pximg.example.com用于反代对齐*.pximg.net,其实该域名中的pximg也可以替换成其他的字符串,只要不与P站的二级域名服务产生冲突即可.泛解析的话,加上 , 代表任意。如果你想用一个自己正在使用的域名反代并且不想影响该域名的其他服务: pixiv.example.com *.pixiv.example.com *.pximg.example.com 各自作用同上,在后续配置上灵性修改即可。获取SSL证书这里采用Let's Encrypt 泛域名SSL(https://www.sslforfree.com/ )这里用宝塔面板进行演示:首先在宝塔面板中添加网站,这里添加两个网站进行反代操作, *.example.com 为一个,*.pximg.example.com pximg.example.com 为一个。选择 Let's Encrypt 证书,并使用 dns 验证方式(dns验证才有泛域名SSL)1.png成功后2.png另一个同上操作。也可以使用 acme 的 DNS API 方式进行挑战验证来签发证书,也很方便。如果你愿意套 CloudFlare,你可以跳过这一节。Nginx[notice]不要使用 Tengine 等 Nginx 分支版本,在某些模块上可能会有一些奇怪的差异与问题[/notice]基础配置这里仅列出关键配置,通常配置例如listen、expires、cache以及 SSL 之类的不会写出,自行添加。 # *.example.com server { server_name ~^([^.]+).example.com$; set $domain $1; //这个set 函数是自定义变量的,将 $1 的值传给 $domain 。而 $1 代表匹配式的第一部分,就是^([^.]+)部分。$2同理。 resolver 8.8.8.8;//定义反代理时用的DNS location ~ .* { proxy_set_header Host $domain.pixiv.net; proxy_set_header Referer "https://www.pixiv.net"; proxy_cookie_domain pixiv.net example.com; proxy_pass https://$domain.pixiv.net; proxy_ssl_server_name on; proxy_set_header Accept-Encoding ""; proxy_redirect https://accounts.pixiv.net/ https://accounts.example.com/; sub_filter "i-cf.pximg.net" "i.example.com"; sub_filter "pixiv.net" "example.com"; sub_filter "pximg.net" "pximg.example.com"; # 防止错误上报暴露站点 sub_filter "js_error.php" "block_js_error"; # 防止谷歌服务暴露站点,同时也可以加快网站加载 sub_filter "www.google" "block_google"; sub_filter_once off; sub_filter_types *; } } # *.pximg.example.com server { server_name ~^([^.]+).pximg.example.com$; set $domain $1; resolver 8.8.8.8; location ~ .* { proxy_set_header Host $domain.pximg.net; proxy_set_header Referer "https://www.pixiv.net"; proxy_pass https://$domain.pximg.net; proxy_ssl_server_name on; proxy_set_header Accept-Encoding ""; sub_filter "i-cf.pximg.net" "i.example.com"; sub_filter "pixiv.net" "example.com"; sub_filter "pximg.net" "pximg.example.com"; # 防止错误上报暴露站点 sub_filter "js_error.php" "block_js_error"; # 防止谷歌服务暴露站点,同时也可以加快网站加载 sub_filter "www.google" "block_google"; sub_filter_once off; sub_filter_types *; } }详解server_name 与 set使用正则表达式匹配以方便直接提取出我们要反代的二级域名resolver必要,指定域名解析所用 DNS,因为在后续proxy_pass中我们要反代的域名是由$domain决定,本身是不定的,Nginx 必须被指定 DNS 才能处理域名解析proxy_cookie_domain改变反代后返回的 header 中 set-cookie 里 cookie 对应的域名,只在*.example.com中需要,是解决登陆问题的关键,如想了解后续文章会解释proxy_ssl_server_name由于 P 站开始上 CF 了,其 TLS 启用了 SNI,因此必须指定此项为on,否则会握手失败proxy_set_header Referer设置 header 中的 Referer,主要目的是解决i.pximg.net的防盗链问题,以及www.pixiv.net的部分 API 的 Referer 验证问题proxy_set_header Accept-Encoding将接受的压缩编码设为空,即不接受压缩,因为sub_filter无法对压缩过的内容起效proxy_redirect将返回原站 302 的请求进行重定向sub_filter将反代后得到的内容进行字符串替换,以保证链接域名等与反代域名一致sub_filter_types必须设置为*,否则默认对于 API 返回的 json 内容等不会进行替换,会导致依靠 ajax 运作的一些功能的异常什么?不会?这里以宝塔面板简单演示:首先配置 *.example.com打开站点修改,选择配置文件修改,在 server { listen 80;后添加一行server_name ~^([^.]+).example.com$;再将后面一行server_name *.你的域名;删除。在index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/你的域名;后添加 set $domain $1; resolver 8.8.8.8; location ~ .* { proxy_set_header Host $domain.pixiv.net; proxy_set_header Referer "https://www.pixiv.net"; proxy_cookie_domain pixiv.net example.com; proxy_pass https://$domain.pixiv.net; proxy_ssl_server_name on; proxy_set_header Accept-Encoding ""; proxy_redirect https://accounts.pixiv.net/ https://accounts.example.com/; sub_filter "i-cf.pximg.net" "i.example.com"; sub_filter "pixiv.net" "example.com"; sub_filter "pximg.net" "pximg.example.com"; # 防止错误上报暴露站点 sub_filter "js_error.php" "block_js_error"; # 防止谷歌服务暴露站点,同时也可以加快网站加载 sub_filter "www.google" "block_google"; sub_filter_once off; sub_filter_types *; }保存。不要忘记修改代码里面的 example.com 为你自己的域名。*.pximg.example.com 网站操作类似。打开站点修改,选择配置文件修改,在......同上后添加一行server_name ~^([^.]+).pximg.example.com$;在......同上后添加 set $domain $1; resolver 8.8.8.8; location ~ .* { proxy_set_header Host $domain.pximg.net; proxy_set_header Referer "https://www.pixiv.net"; proxy_pass https://$domain.pximg.net; proxy_ssl_server_name on; proxy_set_header Accept-Encoding ""; sub_filter "i-cf.pximg.net" "i.example.com"; sub_filter "pixiv.net" "example.com"; sub_filter "pximg.net" "pximg.example.com"; # 防止错误上报暴露站点 sub_filter "js_error.php" "block_js_error"; # 防止谷歌服务暴露站点,同时也可以加快网站加载 sub_filter "www.google" "block_google"; sub_filter_once off; sub_filter_types *; }保存。不要忘记修改代码里面的 example.com 为你自己的域名。3.png增强隐蔽性(建议)防止被搜索引擎收录在 Nginx 配置中向每个 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; }请加到set $domain $1;这句之后,因为该配置也使用了正则表达式,会导致$1改变禁止大陆外IP访问由于反代P站的受众只可能为大陆内用户,因此我们完全可以禁止大陆外IP访问反代站,同时还能防止P站检测投诉但请注意,这个方案是对整台 VPS 的80与443端口生效,这意味着你如果同时在 VPS 上布置了其他站点,他们也将无法被大陆外用户访问如果需要仅对反代站点生效,请自行百度参考“nginx geoip”,或者使用后面所述的套 CloudFlare 的方式参考步骤:安装 ipset:#Debian / Ubuntu apt-get -y install ipset #CentOS yum -y install ipset ```` - 创建一个 ipset 并添加大陆IP作为白名单:ipset -N cnip hash:net for i in $(curl https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt); do ipset -A cnip $i; done如果你想要添加单个IP x.x.x.x 进此白名单ipset -A cnip x.x.x.x/32 - 写入防火墙规则(顺序十分重要,请不要改变执行顺序): iptables -I INPUT -p tcp --dport 443 -j DROPiptables -I INPUT -p tcp --dport 80 -j DROPiptables -I INPUT -p tcp -m set --match-set cnip src -j ACCEPT## 套 CloudFlare 除了上述方案外,我自己是套了层 CloudFlare,并设置了防火墙规则来阻止非国内以及搜索引擎爬虫访问 这样有个优点,一是 SSL 证书都是 Cloudflare 自动签发和续期的,因此使用 Flexible SSL 选项,然后源反代站就不需要操心证书的事了,直接使用 HTTP;二是 Cloudflare 的防火墙可以实现上面提到的屏蔽国内 IP 以及搜索引擎的功能,不需要自己去维护 当然这样是有缺点的,就是设置 DNS 记录 **Cloudflare CDN 是不支持设置泛域名记录的** 因此我们只能一条一条记录加,首次部署简直是要了命,以下列出主站功能相关域名: www.pixiv.net accounts.pixiv.net source.pixiv.net imp.pixiv.net i.pximg.net s.pximg.net pixiv.pximg.net 其他的例如小说、直播等等我个人使用频率很低所以我就不考虑了,当然如果你有需求就自己找域名吧( ### 替换图片域名为其它域名 站长资金紧张,于是又补充了这一条。 原pixiv图片服务域名是 i.pximg.net ,将它换成别人的公开代理服务可以大大降低服务器流量。 第一步: *.pximg.example.com 找到这一个域名的配置文件 修改 sub_filter "pximg.net" "pximg.example.com"; 这一项中的 pximg.example.com 域名删去,留空。 第二步: 找到 *.example.com 这一个域名的配置文件 新添加一项 就加在有相似的条目的那一堆里。 sub_filter "pximg.net" "example.com"; 其中 example.com 为 pixiv图片反代理服务域名 ### 发送头部信息实现绕过谷歌验证自动登入 灵感来源于原文的评论区的评论 注意! 此方法会暴露你的pixiv账户,别人可能会由此获得你的账户的全部权限!!! 所以,找个不重要的pixiv账户或者严格保护自己的反代理网站,防止他人访问。 在两个网站的配置文件里添加,添加方法同上。 proxy_set_header Cookie "这里是你pixiv的cookie"; 如何获取cookie? 电脑端 参考文献: https://jingyan.baidu.com/article/d5c4b52b4dd08ada570dc556.html 手机端 下载Alook 浏览器 https://www.coolapk.com/apk/alook.browser 在工具箱的开发者工具里面可以直接复制cookie。 获取cookie前必须登入,登入后待在跳转后的页面就行。 ### 其它 还可以再添加一些额外的反代理配置增加访问的流畅度。 例如: 反代理并替换 https://a.pixiv.org/yufulight-cdn/apt.js 这一个网址, 反代理配置就不说了,替换配置: sub_filter "你的反代地址" "a.pixiv.org"; 添加到 *.example.com 域名配置文件就行。 ### 局限性/缺点 不能使用绑定的社交账号的登录方式. 账号可能会出现需要 reCAPTCHA 验证导致无法登录,无解,可能存在尚未发现的问题,只能自己将原站已登录的 cookie 导出,替换域名,然后导入反代站来进行登录. 例如: 用 Cookie-Editor 之类的扩展,在原站登录后将 cookie 导出,然后用文本编辑器批量替换下域名,再到你的反代站导入. 不想导入导出 cookie 的,可以手机浏览,可以不用登录...... 比较费主机(vps)流量,是在用金钱浏览pixiv. 千万不能对外发布自己的站点,有几率被举报,很严重. 声明: 本文内容参考了 **神代綺凜** 原创的 **[Pixiv] Nginx 真·反代P站** https://moe.best/technology/pixiv-proxy.html 在原文章基础上做了改编补充,遵守**知识共享署名-非商业性使用 4.0 国际许可协议**。 [1]: /usr/uploads/2022/03/1663119255.jpg [2]: /usr/uploads/2022/03/1121969484.png [3]: /usr/uploads/2022/03/3428803700.png