利用 Nginx反代p站

发布于 11 天前  54 次阅读


深刻意识到,很多以前自己认为无解的问题并不是真的无解,只是自己的知识面不够而无法意识到问题的核心所在罢了。

总结就一个字:菜

by:神代綺凛

本文原作者为:神代綺凛的 [Pixiv] Nginx 真·反代P站 次作者:losquare的 使用宝塔面板快速部署 pixiv 反向代理

本人经过简化 加入自己的理解所完成

警告:

《中华人民共和国计算机信息网络国际联网管理暂行规定》,其中规定了“计算机信息网络直接进行国际联网,必须使用邮电部国家公用电信网提供的国际出入口信道。任何单位和个人不得自行建立或者使用其他信道进行国际联网。”如违反上述规定,公安机关会责令停止联网,给予警告,可以并处15000元以下的罚款;有违法所得的,没收违法所得。

本文仅在技术层面进行探讨,所有内容仅供交流学习,请勿做出违反国家法律的行为

所需资源:

  • 一台能够访问pixiv的主机
  • 宝塔面板(推荐)、
  • 一个域名(二级也行)
    • 注意 后续均已example.com来对域名进行指代

泛域名解析

如果你使用了一个顶级域名专门做反代:

example.com
*.example.com 
*.pximg.example.com

根据原作者的意思

  • exmpe.com
    • 随意,你可以放点自己的东西做一些伪装或者说明,或者直接 301 到www.example.com
  • *.exmpe.com
    • 用于反代对齐 *.pixiv.net
  • *.pximg.example.com
    • 用于反代对齐*.pximg.net,其实该域名中的pximg也可以替换成其他的字符串,只要不与P站的二级域名服务产生冲突即可

如果你用了个正在使用的域名且不想被影响使用:

pixiv.example.com
*.pixiv.example.com
*.pximg.example.com

则可以这样做解析,后续配置进行替换即可

建立新站点

在宝塔面板中建立两个新站点

第一个站点:

example.com
*.example.com

第二个站点:

pximg.exmple.com
*.pximg.exmple.com

分别用来作为主站反代与图片反代

参考图:

对泛域名申请ssl证书

依次对域名进行申请,这里要注意的是泛域名只能使用dns进行解析。

如果使用的域名是阿里云dns 或者cf的dns 等等被宝塔所支持接口的dns那会方便很多。

如果没有,那么我们可以进行手动解析。

首先勾选 DNS 验证,勾选泛解析域名,选择手动解析,然后点击开始申请,根据弹窗,前往你的 DNS 供应商处添加一条 TXT 记录(注意:再次期间不要关闭网页),等待数分钟确保解析生效后,方可点击确认按钮完成证书申请。

修改配置文件

准备:

# *.example.com
server
{
    server_name ~^([^.]+)\.example\.com$;
    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
{
    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 *;
    }
}

这段是给 *.pximg.example.com 所使用

注意:直接输入是没有用的 需要对所使用的域名做一个适配

写入:

在站点修改中找到配置文件项 在#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 上方加入

加入方式 如图:

保存 修改完成

访问 www.你的域名

注意 必须加上"www."不然会出现502报错

或者可以尝试将域名301重定向到www.域名

登入解决方案

其实原作者应该已经通过proxy_cookie_domain解决 但是在我这里并不生效。。。

所以我采用的登入方案是采用EditThisCookie对源站cookie进行导出替换域名实现

下载地址

下载安装完后 同时开启反代站和源站 开启 EditThisCookie 将源站的信息复制到反代站中

注意需要点上绿色的锁

刷新网站,这时候就可以正常使用了


追寻仅存于我们生命中的真理吧!