部分反向(pixiv.cat):
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_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_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"; proxy_cache_valid 200 7d; proxy_cache_valid 404 5m; } } |
Cloudflare Workers 反向代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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' } }) ); }); |
完全反向(https://moe.best/technology/pixiv-proxy.html):
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | # *.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_set_header Accept-Encoding ""; 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_set_header Accept-Encoding ""; 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_set_header Referer
设置 header 中的 Referer,主要目的是解决i.pximg.net
的防盗链问题,以及www.pixiv.net
的部分 API 的 Referer 验证问题 - proxy_set_header Accept-Encoding
将接受的压缩编码设为空,即不接受压缩,因为sub_filter
无法对压缩过的内容起效 - sub_filter
将反代后得到的内容进行字符串替换,以保证链接域名等与反代域名一致 - sub_filter_types
必须设置为*
,否则默认对于 API 返回的 json 内容等不会进行替换,会导致依靠 ajax 运作的一些功能的异常
防止被搜索引擎收录
在 Nginx 配置中向每个 server 添加此句
1 2 3 | 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; } |
套 Cloudflare
备选域名
1 2 3 4 5 6 7 8 | www.pixiv.net accounts.pixiv.net source.pixiv.net imp.pixiv.net i.pximg.net s.pximg.net pixiv.pximg.net |
1 条评论
repostone · 2019年9月30日 下午3:06
非技术的路过。