虎泰克博客

nginx使用正则进行多个域名的反向代理配置及其中的坑


nginx使用正则进行多个域名的反向代理配置及其中的坑

最近需要爬去博客园的文章,但是爬下来的文章内图片因为防盗链无法直接输出到html,因此使用nginx配置了一个反向代理:

location ~/news/
{
    proxy_pass https://img2020.cnblogs.com;
    proxy_set_header Host img2020.cnblogs.com;
    proxy_set_header REMOTE-HOST $remote_addr;
    
    #所有请求带上伪造的REFERER,绕过防盗链
    proxy_set_header Referer "https://news.cnblogs.com/n/684649/";
    
    add_header X-Cache $upstream_cache_status;
    
    #Set Nginx Cache
    
    
    proxy_ignore_headers Set-Cookie Cache-Control expires;

    #去除没用的头部信息
    proxy_hide_header Server;
    proxy_hide_header X-Cache-Lookup;
    proxy_hide_header x-cos-hash-crc64ecma;
    proxy_hide_header x-cos-request-id;
    proxy_hide_header x-cos-verify-algo;
    proxy_hide_header X-Daa-Tunnel;
    proxy_hide_header X-NWS-LOG-UUID;
    proxy_hide_header X-NWS-UUID-VERIFY;

    proxy_cache cache_one;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 301 302 14400m;
    expires 14400m;
}

然后对文章内图片的域名进行替换

str_replace('img2020.cnblogs.com', 'pic.whutech.com', $content);

结果访问早期爬取的新闻发现有些图片无法加载,经过排查后发现博客园的图片库有多个域名,如:img2020.cnblogs.com、img2018.cnblogs.com、images2018.cnblogs.com,但是目录结构都一致,因此使用正则来匹配域名,并在proxy_pass内进行变量替换。

#博客园图片反代
location ~/im(.*).cnblogs.com/
{
    proxy_pass https:/$uri;
    proxy_set_header Host im$1.cnblogs.com;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Referer "https://news.cnblogs.com/n/684649/";
    
    add_header X-Cache $upstream_cache_status;
    
    #Set Nginx Cache
    
    
    proxy_ignore_headers Set-Cookie Cache-Control expires;

    proxy_hide_header Server;
    proxy_hide_header X-Cache-Lookup;
    proxy_hide_header x-cos-hash-crc64ecma;
    proxy_hide_header x-cos-request-id;
    proxy_hide_header x-cos-verify-algo;
    proxy_hide_header X-Daa-Tunnel;
    proxy_hide_header X-NWS-LOG-UUID;
    proxy_hide_header X-NWS-UUID-VERIFY;

    proxy_cache cache_one;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 301 302 14400m;
    expires 14400m;
}

配置完成后发现还是无法访问,报502 Bad Gateway,经过查看error.log,发现有如下报错:

2021/01/27 08:16:27 [error] 20195#0: *1 no resolver defined to resolve images2018.cnblogs.com, client: 112.5.160.37, server: pic.whutech.com, request: "GET /images2018.cnblogs.com/news/66372/201808/66372-20180817102014013-1555092267.jpg HTTP/2.0", host: "pic.whutech.com"

判断是dns问题,搜索后发现是因为proxy_pass使用变量时需要指定dns,否则无法解析,有如下方案,在http{}内添加如下代码即可指定服务器

resolver 223.5.5.5;

最后的所有反向文件代理配置是

#变量域名指定dns
resolver 223.5.5.5;

#博客园图片反代
location ~/im(.*).cnblogs.com/
{
    proxy_pass https:/$uri;
    proxy_set_header Host im$1.cnblogs.com;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Referer "https://news.cnblogs.com/n/684649/";
    
    add_header X-Cache $upstream_cache_status;
    
    #Set Nginx Cache
    
    
    proxy_ignore_headers Set-Cookie Cache-Control expires;

    proxy_hide_header Server;
    proxy_hide_header X-Cache-Lookup;
    proxy_hide_header x-cos-hash-crc64ecma;
    proxy_hide_header x-cos-request-id;
    proxy_hide_header x-cos-verify-algo;
    proxy_hide_header X-Daa-Tunnel;
    proxy_hide_header X-NWS-LOG-UUID;
    proxy_hide_header X-NWS-UUID-VERIFY;

    proxy_cache cache_one;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 301 302 14400m;
    expires 14400m;
}

图片反向代理配置完成后在对文章内容进行输出时进行一个域名替换就好了。

str_replace('://im', '://pic.whutech.com/im', $content);

最后效果如下:

虎osetl泰mgqq克ahly新rq闻re网vdkxo版权所有,请勿未授权转载!!!

image.png



声明:凡本网转载的文/图等稿件,均出于传递更多信息及方便探讨之目的,并不意味着本站及主办、承办单位赞同其观点或证实其内容的真实性,文章内容仅供参考,如果侵犯了原作者的权利请与网站管理员联系。

登录以发表评论

评论列表

    暂无数据