使用cloudflare workers或者服务器反代pixiv
博主原先使用pixiv.cat,但是最近vps买多了,打算自己也来玩一玩
可能初学者或者小白好奇什么是反代,或者说,这个搭建服务有什么用呢?
由于总所周知的原因pixiv、twitter、ins、Google、YouTube等等很多网站(服务)在国内不靠科技手段是无法访问。
不知道在看这篇文章的你是否做过网站或写过机器人,我有一个朋友曾经开发过发二次元机器人(你说的那个朋友是不是你自己)
为了减小服务器(准确的来说应该是挂机宝)存储压力,打算只分类收集pixiv的链接,当需要发送图片的时候再去访问pixiv的原链接抓取图片
但是那时候挂机宝本来性能就吃紧,如果再开代理去访问pixiv源站抓取链接会很耗资源,且要多写的东西更多(吧唧吧唧什么模拟访问啊之类的,虽然不难但是很烦,但你硬要说curl的话那也是完全可以的),因为pixiv的圖片伺服器網域為 i.pximg.net,因為有盜連保護,只要 Referer 是空值或不是來自 pixiv 的網域就會返回403。所以我们的目标就是不开代理获取源站图片!
pixiv 網站上的原始連結(在其他網站使用會返回403)举个栗子:https://i.pximg.net/img-original/img/2018/04/24/01/51/35/68377968_p0.png
上述例子你在不开代理的情况下是无法访问的,哪怕开了你点进去也是返回403
所以到底什么是反向代理
反向代理是一种代理服务器,它代表客户端从一个或多个服务器检索资源。然后将这些资源返回给客户端,反向代理是任何客户端联系其关联服务器的中介。代理服务器为服务器作代理人,站在服务器这边,对外屏蔽了服务器的信息,这就是反向代理。反向代理可以用一个端口跑多个应用。
正常情况下假设我们要百度搜索一样东西,应该是下面的流程(极简版)
如果是反向代理的情况下,那我们的流程就变成了下面这样
去程:用户浏览器->(提交请求)->反向代理服务器->(用户提交的请求)->百度服务器
回程:百度服务器->(搜索结果)->反向代理服务器->(百度返回的搜索结果)->用户浏览器
可以看到反向代理服务器就是一个中介,他不负责处理任何数据,他只负责把你所提交的东西(数据)交给你想要访问的百度(假设你要访问的是百度),然后再把它访问后得到的结果反馈给你,中间商不赚差价(哭死)
于是我们就能引入正题(扯半天)
首先明确我们要做的是什么
上述文中提到的两个规则
- pixiv的圖片伺服器網域為 i.pximg.net,因為有盜連保護,只要 Referer 是空值或不是來自 pixiv 的網域就會返回403。
- pixiv 網站上的原始連結(在其他網站使用會返回403)
我们只要让我们的vps满足这两个条件即可拿到源站图片
那么我将分为cloudflare workers与服务器两种方法讲一遍
cloudflare workers篇
addEventListener("fetch", event => {
let url = new URL(event.request.url);
url.hostname = "i.pximg.net";
let request = new Request(url, event.request);
event.respondWith(
fetch(request, {
headers: {
'Referer': 'https://www.pixiv.net/',
'User-Agent': 'Cloudflare Workers'
}
})
);
});
进入dashboard,找到workers
随后我们根据图示点击Create a Service(新建一个服务)
我们会到一个新建服务的界面,红圈的地方可以自定义,下面的选项不要改动,保持默认即可
全部确定好后即可点击下方的Create service完成创建,然后我们进到下一页点击右上角的Quick edit
进入快速编辑页面后无需多动,首先将下方箭头处的全部文本删除,然后粘贴前文提到的代码即可
最后不要忘记保存,然后我们就得到了一个反代链接
大多数人会觉得那个连接超级长,没关系,我们回到该workers的概览界面,然后选择Triggers
我们在此处添加域名即可
(cloudflare workers教程完)
服务器篇(本教程基于已安装宝塔面板及nginx的服务器上)
首先将自己打算做反代的域名解析到服务器,然后先申请ssl且部署完成再开始本教程
我们先进入站点根目录新建一个目录,名为cache,然后我们打开站点的配置文件
在第一行插入以下代码
proxy_cache_path /path/to/cache levels=1:2 keys_zone=pximg:10m max_size=10g inactive=7d use_temp_path=off;
将上述文本中的 /path/to/cache 改成刚刚新建的cache的绝对路径,如下图
在这个站点配置文件中找到以下代码并将他们全部删除或注释(通常在40-70行之间)
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-72.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/i.acg.ge.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#禁止在证书验证目录放入敏感文件
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
return 403;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
然后在删除或注释的地方添加下面的代码
location / {
proxy_cache pximg;
proxy_pass https://i.pximg.net;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
proxy_set_header Host i.pximg.net;
proxy_set_header Referer "https://www.pixiv.net/";
proxy_cache_valid 200 7d;
proxy_cache_valid 404 5m;
}
在注释掉之后应该如我这样
怕小白找起来麻烦,我把我改完的整一套放在下方,不要照抄(你我的域名不一样),可以对照
proxy_cache_path /www/wwwroot/i.acg.ge/cache levels=1:2 keys_zone=pximg:10m max_size=10g inactive=7d use_temp_path=off;
server
{
listen 80;
listen 443 ssl http2;
server_name i.acg.ge;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/i.acg.ge;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/i.acg.ge/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/i.acg.ge/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
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-72.conf;
# #PHP-INFO-END
# #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
# include /www/server/panel/vhost/rewrite/i.acg.ge.conf;
# #REWRITE-END
# #禁止访问的文件或目录
# location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
# {
# return 404;
# }
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
# #禁止在证书验证目录放入敏感文件
# if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
# return 403;
# }
# location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
# {
# expires 30d;
# error_log /dev/null;
# access_log /dev/null;
# }
# location ~ .*\.(js|css)?$
# {
# expires 12h;
# error_log /dev/null;
# access_log /dev/null;
# }
# access_log /www/wwwlogs/i.acg.ge.log;
location / {
proxy_cache pximg;
proxy_pass https://i.pximg.net;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
proxy_set_header Host i.pximg.net;
proxy_set_header Referer "https://www.pixiv.net/";
proxy_cache_valid 200 7d;
proxy_cache_valid 404 5m;
}
access_log off;
error_log /www/wwwlogs/i.acg.ge.error.log;
}
保存全部,即可生效!
验证阶段(cloudflare workers与服务器均为这样验证)
访问url不带任何参数应该显示如下
pixiv的原图链接:https://i.pximg.net/img-original/img/2018/04/24/01/51/35/68377968_p0.png
将开头的i.pximg.net改为你的域名,例如我的反代域名是i.acg.ge,则改为:
https://i.acg.ge/img-original/img/2018/04/24/01/51/35/68377968_p0.png
如果这样可以正常获取到图片那么恭喜你我们成功啦!
你嫌麻烦的话可以使用本站搭建好的服务哦:
日本大阪软银(GFW):https://i.acg.ge/
日本大阪软银:https://i.acg.ma/
香港沙田:https://i.acg.gdn/
cf workers:https://pixiv.acg.gdn/
撰写评论