doubanio反代

因为一直都是用一个电影信息查询脚本来更新电影信息,都是豆瓣上的信息,海报也是豆瓣的,但是最近几天img9.doubanio.com开始抽风,说什么错误代码:418 I'm a teapot,完全不让白嫖了,好在现在AI强大,就撸了一个Cloudflare Workers的代码,但是这东西如果用超了毕竟是要收费的,好在VPS的流量足够多,就直接在VPS中反代就好了。

以前都是用nginx-proxyNginx Proxy Manager,最多用过caddy-docker-proxy,但是这几个东西的主要作用是代理本地的Docker容器,NPM凑合能用,但是搞不定Referer,AI问了一圈,最后自己撸Caddyfile才是王道(主要是Nginx需要自己搞定证书,有点繁琐)。

与Qwen交流之后,得到了一下的代码,以下假设你准备的域名是img*.douban-proxy.com,然后你有一个BBS或者网站叫做bbs.site.com

# Global Options
{
    # 设置用于 ACME 证书管理的邮箱地址
    email xxxxx@xxxxx.com
}

(@check_douban_proxy_referer) { # 这段主要是防盗链
    @from_bbs {
        header Referer *bbs.site.com* # 匹配
    }
    @not_from_bbs {
        not header Referer *bbs.site.com* # 不匹配或空Referer
    }
}

img1.douban-proxy.com {
    import @check_douban_proxy_referer
    handle @not_from_bbs {
        respond "Forbidden" 403
    }
    handle @from_bbs {
        reverse_proxy https://img1.doubanio.com {
            header_up Host {upstream_hostport} # 设置正确的 Host 头
            header_up Referer https://www.douban.com # 设置 Referer 头
            header_up X-Real-IP {remote_host}
        }
    }
    header -Server
    header -Via
    header -X-Cache
    header -X-Powered-By
}

img3.douban-proxy.com {
    import @check_douban_proxy_referer
    handle @not_from_bbs {
        respond "Forbidden" 403
    }
    handle @from_bbs {
        reverse_proxy https://img3.doubanio.com {
            header_up Host {upstream_hostport}
            header_up Referer https://www.douban.com
            header_up X-Real-IP {remote_host}
        }
    }
    header -Server
    header -Via
    header -X-Cache
    header -X-Powered-By
}

img9.douban-proxy.com {
    import @check_douban_proxy_referer
    handle @not_from_bbs {
        respond "Forbidden" 403
    }
    handle @from_bbs {
        reverse_proxy https://img9.doubanio.com {
            header_up Host {upstream_hostport}
            header_up Referer https://www.douban.com
            header_up X-Real-IP {remote_host}
        }
    }
    header -Server
    header -Via
    header -X-Cache
    header -X-Powered-By
}

然后新建一个Caddy容器,用volume引用这个文件就可以了,既能反代,还可以防盗链。

另外,如果你有别的容器需要代理,完全可以拿这个代替,Caddyfile再多写几个Site Block的事,总体学习起来比Nginx要简单,具体到资源占用和速度,其实不是强迫症的话可以接受,除非你的并发访问非常大。

更多使用方法可以跳转到Caddy v2 中文文档

heartnn

Read more posts by this author.

河北, 石家庄 https://www.heartnn.com