Nginx 反向代理任意请求的域名

Posted by admin; tagged with nginx

有一个需求是作为子域名反向代理全网的域名,最早采用的方案是用爬虫爬取全网的域名,然后生成 Nginx 配置文件。

比如请求 baidu.example.com 则反向代理 www.baidu.com

爬取全网域名的工作已经完成,在调试 Nginx 反向代理配置遇到了一个问题:www.baidu.com 引用了static.baidu.com 的资源,如何正确的引用资源成了阻碍项目进展的难题。

最后我决定采用 Nginx 正则表达式做一个 hack,截取请求来的 www.baidu.com.example.com 中的www.baidu.com,然后写 Nginx 相应的代理配置。

server {
    listen 80;
    server_name _;
    location / {
        resolver 8.8.8.8;
        if ($host ~ (.*)\.qiyichao\.cn) {
            proxy_pass http://$1;
        }
        proxy_set_header referer http://$1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $1;
        proxy_set_header Accept-Encoding "";
        
        subs_filter (https?://[^\'"\\\\<>:\s]+(:\d+)?)?([^\'"\\\\<>:\s]+?) http//$3.qiyichao.cn/ rgi;

    }
}