使用宝塔面板快速部署 pixiv 反向代理

前言

本教程根据 神代綺凜 的文章 Nginx 真·反代P站 恢复直接访问 加之我的个人理解改编。

本教程通过使用宝塔面板部署以达到简化步骤的目的,并补充了一些实践中发现细节。

正文

配置示例

在这里展示出我配置时的环境示例
仅供参考

域名:

  • *.pxing.test.qixiv.tk
  • *.test.qixiv.tk

服务器环境:
centos 7_64 bit
宝塔版本号6.8.9

友情提示

关于服务器:

首先,你的服务器必须在国外!尽管我想推荐初学者使用 vultr 的 vps ,但需要注意的是,pixiv 似乎屏蔽了 vultr 所有以 45.* 开头的IP地址。此外,如果你有公开镜像的意向,为了防止 pixiv 律师函警告,你可能需要选择抗投诉服务器。

关于域名:

就我个人观点而言,域名随意,如果你没有,那可以用 freenom 的免费域名将就一下,也不是问题,但由于 freenom 自带的 DNS 服务对泛解析的支持不太良好,你可能需要另行更换 DNS服务商。

事前准备

在一切开始之前,你需要准备好一个域名,以及一台装有宝塔面板的服务器。我们假设你已经知道怎么获取这些东西,如果你不知道,请自行百度。

解析你的域名

需要使用哪些域?

在反代时我们需要用到以下几个域

如果你愿意使用一个船新域名专门反代:

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

如果你想用一个自己正在使用的域名反代并且不想影响该域名的其他服务:

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

各自作用同上,在后续配置上灵性修改即可

修改配置文件

在进行服务器上的操作之前,我们先要在本地进行一些处理。

有两段 nginx 的配置文件需要被预先修改一下。我们需要将其中的示例域名替换为自己的域名。

第一段是给 *.example.com 用的

    server_name ~^([^.]+)\.example\.com$;

    set $domain $1;

    resolver 8.8.8.8;

    location ~ .*
    {
        proxy_set_header Host $domain.pixiv.net;
        proxy_cookie_domain pixiv.net example.com;
        proxy_pass https://$domain.pixiv.net;
        proxy_set_header Accept-Encoding "";

        sub_filter "pixiv.net" "example.com";
        sub_filter "pximg.net" "pximg.example.com";
        sub_filter_once off;
        sub_filter_types *;
    }

第二段是给 *.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_set_header Accept-Encoding "";

        sub_filter "pixiv.net" "example.com";
        sub_filter "pximg.net" "pximg.example.com";
        sub_filter_once off;
        sub_filter_types *;
    }

新建站点

接下来,在宝塔面板里新建两个站点,同样依照以下格式替换你的域名。之所以不只添加泛解析域名,是因为...宝塔不让。

第一个站点:

example.com
*example.com

第一个站点的图片示例(仅供参考)

2019-09-24_133137.png

第二个站点:

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

第二个站点的图片示例(仅供参考)

2019-09-24_1330538.jpg

新建完之后的效果(仅供参考)

2019-09-24_133055.png

申请泛域名ssl证书

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

两个站点的 SSL 设置完之后的效果(仅供参考)

2019-09-24_133212_1.png

2019-09-24_13330 _1.png

修改nginx配置文件

最后,我们需要修改nginx的配置文件,将上面的两段配置文件分别配置入两个站点中。

第一步,替换原本配置文件中以 server_name 开头的那一行为你修改完毕后的配置文件中的以 server_name 开头的那一行。

第二步,将除了以 server_name 开头的那一行之外的剩下的文本插入原有配置文件的
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 这一行的上方,请注意,这个位置很重要,不要弄错了。

直接文字描述可能不是很好理解,所以在这里给出两个站点配置文件的示例,需要修改的部分已经黄色高亮标出。
因为是截图出自是我自己的配置文件,所以直接把代码抄过去是没用的,记得按照上面的教程进行修改哦!!!

pximgtestqixivtk.png

testqixivtk.png

修改完毕,保存。

访问 www.你的反代域名

注意:要加 “www.” 不然会502报错

注意2:在使用反代登录PIXIV账号时可能出现“需要网站所有者处理的错误:网站密钥的网域无效”的情况,在此给出原教程博主 神代綺凜 的解答

2019-09-24_141755.png

开始享受直连 p 站的喜悦吧。

最后修改:2019 年 09 月 24 日 02 : 20 PM

发表评论 取消回复

32 条评论

  1. emm
    该评论仅登录用户及评论双方可见
    1. emm
      @emm

      那个,根据作者提供的神代文章我自行解决了,谢过作者

    2. emm
      @emm
      该评论仅登录用户及评论双方可见
    3. emm
      @emm
      该评论仅登录用户及评论双方可见
    4. emm
      @emm
      该评论仅登录用户及评论双方可见
  2. emm
    该评论仅登录用户及评论双方可见
  3. emm
    该评论仅登录用户及评论双方可见
  4. Ed

    这个错误怎么回事
    ERROR:
    nginx: [emerg] "sub_filter" directive is duplicate in /www/server/panel/vhost/nginx/pixiv.nimassr.ml.conf:18
    nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

    1. losquare
      @Ed

      可能是你的 sub_filter 配置写重复了 |´・ω・)ノ

  5. LYM

    https://www.pixiv.loli.by/
    这样呢。。。无论https和http好像都不行。。

    1. losquare
      @LYM

      感觉是 SSL 设置有问题欸 (´ο`*)
      检查一下 SSL 设置看看?

      浏览器报错:
      此网站无法提供安全连接
      www.pixiv.loli.by 使用了不受支持的协议。
      ERR_SSL_VERSION_OR_CIPHER_MISMATCH
      协议不受支持
      客户端和服务器不支持一般 SSL 协议版本或加密套件。

      1. LYM
        @losquare

        cf不能泛解析-_-||

        1. losquare
          @LYM

          欸?我记得cf可以泛解析呀,虽然不能给泛解析套cdn......

          1. LYM
            @losquare
            该评论仅登录用户及评论双方可见
      2. LYM
        @losquare
        该评论仅登录用户及评论双方可见
        1. losquare
          @LYM

          好友已加 (*/ω\*) 刚才回复的时候忘记登陆了

          1. LYM
            @losquare
            该评论仅登录用户及评论双方可见
            1. losquare
              @LYM

              咱的QQ:754782949

      3. LYM
        @losquare

        http://chart.loli.by/uploads/2019/09/6_6_R_ZGCP0WBL4_5_PP7EO.png

  6. LYM

    修改nginx配置文件那步能给个范例吗。。感觉不是特别清楚。。唔。。还有发布评论框应该放到上面

    1. losquare
      @LYM

      加了几张图片范例,希望可以帮到你ヾ(≧∇≦*)ゝ

  7. kenshin

    https://img.vim-cn.com/20/84032df5a29bc2f05614ffae84fd2cf32b8d9d.png

    这个是咋回事

    1. losquare
      @kenshin

      很明显是页面没有加载全,但光凭这张图片我也没办法判断问题出在哪里ヾ(´・ ・`。)ノ"

      1. kenshin
        @losquare
        该评论仅登录用户及评论双方可见
        1. losquare
          @kenshin

          如果您留的QQ是真实的,也许您愿意加个好友和我探讨一下?我也很担心我的教程是否出现了错误。

        2. losquare
          @kenshin

          很抱歉今天才回复你,我刚才看了一下,我的宝塔面板里明明把两个反代都关闭了,但不知道为什么主站反代自己开了起来,全部打开后我确认我的反代可以正常访问(虽然很慢),根据你的图片里的网址我访问看了下,你的https好像有问题,准确的说,你的域名只要加了https我一个都打不开,但http是正常的,我现在用的是手机,明天我再用电脑看一下,如果https还是打不开,你可能需要调整你的ssl设置。

  8. Wyttle

    user www www;
    worker_processes auto;
    error_log /www/wwwlogs/nginx_error.log crit;
    pid /www/server/nginx/logs/nginx.pid;
    worker_rlimit_nofile 51200;

    events
    {
    use epoll;
    worker_connections 51200;
    multi_accept on;
    }

    http
    {
    include mime.types;
    #include luawaf.conf;

    include proxy.conf;

    default_type application/octet-stream;

    server_names_hash_bucket_size 512;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 50m;

    sendfile on;
    tcp_nopush on;

    keepalive_timeout 60;

    tcp_nodelay on;

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
    gzip_vary on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_disable "MSIE [1-6]\.";

    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=perserver:10m;

    server_tokens off;
    access_log off;
    server
    {
    listen 80;
    listen 443 ssl http2;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/stop;
    server_name ~^([^.]+)\.pixiv\.waite\.xyz$;
    set $domain $1;
    resolver 8.8.8.8;
    location ~ .*
    {
    proxy_set_header Host $domain.pixiv.net;
    proxy_cookie_domain pixiv.net pixiv.waite.xyz;
    proxy_pass https://$domain.pixiv.net;
    proxy_set_header Accept-Encoding "";

    sub_filter "pixiv.net" "pixiv.waite.xyz";
    sub_filter "pximg.net" "pximg.waite.xyz";
    sub_filter_once off;
    sub_filter_types *;
    }

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
    rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate /www/server/panel/vhost/cert/pixiv.waite.xyz/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/pixiv.waite.xyz/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497 https://$host$request_uri;

    #SSL-END

    #ERROR-PAGE-START 错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/pixiv.xyz.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
    return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
    allow all;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    error_log off;
    access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
    expires 12h;
    error_log off;
    access_log /dev/null;
    }
    access_log /www/wwwlogs/pixiv.xyz.log;
    error_log /www/wwwlogs/pixiv.xyz.error.log;
    }

    server
    {
    listen 80;
    listen 443 ssl http2;
    server_name ~^([^.]+)\.pximg\.waite\.xyz$;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/server/stop;

    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_set_header Accept-Encoding "";

    sub_filter "pixiv.net" "pixiv.waite.xyz";
    sub_filter "pximg.net" "pximg.waite.xyz";
    sub_filter_once off;
    sub_filter_types *;
    }
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
    rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate /www/server/panel/vhost/cert/pximg.waite.xyz/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/pximg.waite.xyz/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497 https://$host$request_uri;

    #SSL-END

    #ERROR-PAGE-START 错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START PHP引用配置,可以注释或修改
    include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/pximg.waite.xyz.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
    return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
    allow all;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    error_log off;
    access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
    expires 12h;
    error_log off;
    access_log /dev/null;
    }
    access_log /www/wwwlogs/pximg.waite.xyz.log;
    error_log /www/wwwlogs/pximg.waite.xyz.error.log;
    }
    server
    {
    listen 80;
    server_name ~^([^.]+)\.pixiv\.waite\.xyz$;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/server/stop;

    #error_page 404 /404.html;
    include enable-php.conf;

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    }

    location ~ .*\.(js|css)?$
    {
    expires 12h;
    }

    location ~ /\.
    {
    deny all;
    }

    access_log /www/wwwlogs/access.log;
    }
    include /www/server/panel/vhost/nginx/*.conf;
    }
    还是502Bad gateway

    1. losquare
      @Wyttle

      根据你的信息看了看,你的配置没有问题,访问 https://www.pixiv.waite.xyz/ 可以看到页面正常显示哦。

  9. Ty3

    我访问提示502怎么解决呀(´இ皿இ`)

    1. losquare
      @Ty3

      502的话应该是配置文件不对,把你改好的配置文件贴出来我帮你看下吧( ’ - ’ * )

      1. losquare
        @losquare

        你可以先自己检查一下修改配置文件的时候有没有替换完全了,尤其是server_name那一行,还有最后修改nginx配置文件 第二步有没有插错地方
        |´・ω・)ノ

        1. losquare
          @losquare

          我贴段自己的宝塔里的nginx配置文件你参考下╮(╯▽╰)╭

          server
          {
          listen 80;
          listen 443 ssl http2;
          server_name ~^([^.]+)\.pximg\.test.qixiv\.tk$;
          index index.php index.html index.htm default.php default.htm default.html;
          root /www/server/stop;

          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_set_header Accept-Encoding "";

          sub_filter "pixiv.net" "test.qixiv.tk";
          sub_filter "pximg.net" "pximg.test.qixiv.tk";
          sub_filter_once off;
          sub_filter_types *;
          }

          #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
          #error_page 404/404.html