OpenResty做CDN如何把302跳转处理成给用户传最终响应内容(200状态码)

转载至:微信公众号:可道技术

需求说明

使用OpenResty(Nginx+Lua)做CDN组件,遇到一个需求,需要把源站响应的302跳转处理掉,就是自动在CDN把302消化掉而把200响应内容发送给用户,简单点说就是不让302走到请求客户端那边。

解决方案—— error_page

感谢方腾同学的指点。 这里已一个优酷视频的302跳转为例,直接上代码:

server {
 listen 80;
 server_name k.youku.com; 
 resolver 10.16.20.3;
 proxy_intercept_errors on;
 recursive_error_pages on;
 location  / {
     proxy_pass http://k.youku.com;
     proxy_set_header Host k.youku.com;
     error_page 302 = @error_page_302;
 }

 location ~ /proxyto/([^/]+)(.*) {
     proxy_pass http://$1$2$is_args$query_string;
     error_page 302 = @error_page_302;
 }
 location @error_page_302 {
     rewrite_by_lua '
        local _, _, upstream_http_location = string.find(ngx.var.upstream_http_location, "^http:/(.*)$")
        ngx.header["cnkedao"] = "/proxyto" .. upstream_http_location
        ngx.exec("/proxyto" .. upstream_http_location);
         ';
 }
 access_log logs/yk.log;

}  

使用Nginx内置的error_page方法捕获302状态码,然后把请求指定到location @error_page_302去处理。
里面的处理逻辑大概就是把302的Header中的Location段的http URL取出来,然后再使用ngx.exec发起请求获取文件内容。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值