抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Yuki 妙妙屋

不要因为走得太远,就忘了当初为什么出发。

Pixiv 图片反向代理

众所周知,Pixiv(以下简称 P 站)因各种不可抗力,在部分地区无法正常访问站点,并且图片服务器域名 i.pximg.net 具有盗链保护,只要 Referer 不是来自 P 站的请求,都会返回 403 状态码。那么,我们如何才能通过 URL 直接访问到图片资源?

为什么要代理图片?

你可能首先就想到了反向代理,可 P 站都被墙了这么多年,既然都准备走反代了,为什么还要单独针对图片?直接搭建反代站点不是更好么?

首先,反代站点存在着风险,可能会导致 P 站向主机商发送投诉邮件,甚至还会导致 VPS 等服务被终止。其次是包括我在内的大多数人,都只有简单的看 图需求,没有特别复杂的使用场景。

类似例如 loliconacgmx 等许多基于 P 站的色图 API,返回的也都是官方图片链接,并不能直接访问,所以便有了单独针对图片代理的需求。

第三方代理

若不会自己搭建,也可以直接使用第三方服务。pixiv.cat 就是一个专门用于 P 站图片代理的站点,甚至能直接通过图片 ID 请求获取插画。

我最初也是使用的该服务,不过后续因主域名在我所在的地区被墙,导致服务全挂掉了(我当时还以为是服务器坏了,排查了近 10 分钟才发现是代理的问题),便有了自建的想法。

反向代理

如果你有自己的服务器,可以使用 Nginx 进行代理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
proxy_cache_path /path/to/cache levels=1:2 keys_zone=pximg:10m max_size=10g inactive=7d use_temp_path=off;

server {
listen 443 ssl http2;

ssl_certificate /path/to/ssl_certificate.crt;
ssl_certificate_key /path/to/ssl_certificate.key;

server_name i.pixiv.cat;
access_log off;

location / {
proxy_cache pximg;
proxy_pass https://i.pximg.net;
proxy_ssl_server_name on;
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;
}
}

没有服务器也没关系,我们可以利用 Cloudflare 的 Workers 白嫖,每日免费提供 10 万次请求,完全满足日常使用。总不至于不够用吧?别冲了,人要冲死了。

1
2
3
4
5
6
7
8
9
10
11
export default {
fetch(request) {
const url = new URL(request.url);
url.hostname = 'i.pximg.net';

const proxyRequest = new Request(url, request);
proxyRequest.headers.set('Referer', 'https://www.pixiv.net/');

return fetch(proxyRequest);
},
};

你如果看过其它提供反向代理的教程,可能已经发现了,我写的 Workers 代码与别人贴的不太一样。这是因为 Workers 目前更推荐 ES modules 格式,官方示例也已经从 Service Worker 语法迁移到了 ES modules。

1
2
3
4
5
6
7
8
9
10
11
12
13
addEventListener('fetch', event => {
const url = new URL(event.request.url);
url.hostname = 'i.pximg.net';

const request = new Request(url, event.request);
event.respondWith(
fetch(request, {
headers: {
Referer: 'https://www.pixiv.net/',
},
}),
);
});

这种写法其实也可以,但它已经过时了,所以我并不推荐。

我要色色!

配置相关 DNS 解析后,就可以通过 URL 直接访问 P 站图片了。

P 站上的原始链接(直接打开或在其他网站使用会返回 403):

https://i.pximg.net/img-master/img/2021/06/10/18/09/04/90457556_p0_master1200.jpg

原始图片链接(无法正常显示)

反向代理(i.yuki.sh)(能正常访问):

https://pixiv.yuki.sh/image/img-master/img/2021/06/10/18/09/04/90457556_p0_master1200.jpg

kokkoro

嘛,如果你看完文章还是嫌麻烦,也可以直接把 i.yuki.sh 拿去用,给个 Blog 点个 Star 就行了(笑)。

i.yuki.sh 已于 2026 年 8 月 23 日凌晨正式停止服务,详情见文末后记。pixiv.yuki.sh 仍会持续更新,但不再对外提供图片代理服务。

罗翔说法

张三在网上,用别人提供的 API 服务,居然在 QQ 群里发 R18 的图片,请问张三这一行为触犯了哪项法律?

offend

技术虽无罪,但还是提醒一下,发送的图片请务必遵守你所在国家或地区的法律法规,别被请喝茶了。

后记

2022-10-03

出于几个月前发生的事情(关注 P 站的应该都知道,有人用别人搭建的反代服务盈利),特别强调一下,本来就靠爱发电,某些人别把开源环境弄得越来越恶臭。

2023-10-20

反代服务 pixiv.yuki.sh 已更换为 i.yuki.sh,原地址将作为随机图片 API 来使用,详见 随手做了一个 Pixiv 图片小工具

2023-12-16

这个周末,我还是和往常一样,惬意地吹着暖气,打着 Gal。就在这时,我突然收到了一封来自服务商的邮件,不看不知道,一看吓一跳,我的反代服务突然出现了大量的请求。

是被 DDoS 了?咱平时也没做坏事呀……带着这个疑问,我立即查看了后台数据,看到每秒 7 次的访问频率已经持续了一个小时。这么低的频率看来并不是被恶意攻击了,而且 IP 也没发现异常,这让我松了一口气。为了保证 API 能够正常使用,我立马将服务做了升级,随后继续打着黄油。

万万没想到,这种状况一直持续了近 24 小时。起初我其实并不介意,有人能用我的代理服务是一件很开心的事情,因为我做的东西帮到了他人。不过在好奇心的驱使下(到底是谁能冲这么久),我去看了眼日志,当时血压就上来了,喵了个咪的居然一直在请求 R18 的图片。

image

我立即制作了这张图片,用作 API 的固定返回结果,并要求当事人与我取得联系。

说实话,我从没这么生气过,用着别人的代理服务一直发 R18 的图片,一天请求了百万次都是小事,但是 IP 全部来自国内,各种不堪入目的图片出现在公共场合,这是一件很自豪的事情么?关注 Gal 圈的应该都知道,上个月就是因为发生了类似的事件,导致站长受了牵连。

直到今天,当事人也没有与我取得联系,在群友的帮助下,我大概了解到了事情的经过。起因是一个链接在各大 QQ 群疯传,专门用来获取 R18 图片,而那个 API 正是使用了我的代理服务。当时我正在气头上,准备去找当事人理论理论,点进 Blog 一看……嗯,年纪挺小的一小孩,好像也就没那么生气了。毕竟不知者无罪,也难怪胆子那么大,这件事也算是给我自己起到了一个警示。

2026-08-22

在 6 月 22 日晚上,正打着游戏的我,突然收到了一份来自 PayPal 的 50 刀账单……

我被吓得当场存档退出,虽然 50 刀并不算多,但对于这莫名其妙产生的账单,咱也不能坐以待毙(毕竟……50 刀耶,可以买多少黄油呀)。

没过多久,我就查明了账单来源,原来是反代服务产生的流量费用,这让我稍微松了一口气。再往下继续翻看访问统计才得知,原来从 5 月起,i.yuki.sh 的流量突然直线上升,日请求量很快冲到了 600 万次。

我这是要火了?可转念一想,好像也不对。在当初公开服务时,我本就没想过索取回报。现在有这么多人因此得到帮助,那么我的付出便是值得的。截至目前,日请求量已经稳定在了 800 万次。

嘛,这么多人在用,开心归开心,我还是忍不住好奇……这些激增的请求量到底从何而来?仔细查看流量访问统计后,我发现请求量总会在几个特定时段突然激增。我一直觉得访问内容属于个人隐私,也没有翻别人记录的癖好。但为了确认服务没有被滥用,我还是在今天随机抽取了几个异常时段的请求日志。

本来这一查没什么,在整理完数据后,我被气坏了,日志里图片请求有接近 80% 都是 R18 内容。看色图就算了,关键是色图还全都是那种质量极其低下的。

我 chovy,你们他喵了个咪的看色图,给我看好的呀(摔)!

到这时我才后知后觉,每天 800 万次请求,怎么想都不可能是正常用户造成的。再结合异常时段内的来源 IP、请求频率、访问规律和日志里那些毫无美感的图片,我基本可以确信,大部分流量都来自自动化脚本。访问量从 5 月开始暴涨,而我直到 3 个月后的现在才想起来查日志,也确实有点心大。不过,与上次链接在 QQ 群里疯传不同,这次没有再闹出类似的风波,也算是不幸中的万幸。

反代服务上线至今,已经快 4 年了,在这期间得到了大家的一致好评。虽然有很多的不舍,但我还是决定于今天正式停止服务。由此影响到的正常用户,我感到万分抱歉。如果只是个人使用,可以参照本文自行搭建,也可以改用 i.pixiv.re 替代 i.yuki.sh

在更新这篇文章时,我也想了很多。如果我身处对成人内容限制更宽松的国家或地区,还会选择停掉代理服务吗?又或是如果服务没有长期遭到滥用,这份靠爱发电还能坚持多久?也许答案并不重要。我的初衷,不过是想让大家在看到喜欢的插画、分泌多巴胺的那一刻,露出最朴实无华的微笑(真的是微笑吗),留下那最纯真无邪的感动。

一路走来,感谢有你。

评论