nginx结合rewrite实现反代

遇到这么个业务,当我访问http://www.a.com/a.mp4?a=1&orig=www.b.com我要反向代理到

http://www.b.com?a=1注意这里我的orig参数是不反代过去的。配置如下:

     location ~ .*\.mp4$ {
           set $pro_target $arg_orig;
            if ($args ~ "^(.*)&orig=(.*)$") {
                set $args $1;
            }

            rewrite ^/ $uri?$args? break;

            proxy_cache_valid any 0s;

            proxy_ssl_session_reuse off;

            proxy_ssl_server_name on;

            proxy_cache off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;

            proxy_pass https://$pro_target;

      }
把参数里的orig去掉。只要前面的参数。然后放到服务器,注意,因为我代理的是https所以这里一定要加这两句:
            proxy_ssl_session_reuse off;

            proxy_ssl_server_name on;
否则会报:
SSL_do_handshake() failed (SSL: error:14094438:SSL routines:ssl3_read_bytes
然后我放到服务器上,报如下错:
no resolver defined to resolve xxx
所以在server里添加解析:
resolver 1.2.4.8;或者
resolver 114.114.114.114;

另附resolver介绍:

背景:nginx 配置proxy_pass后,访问接口出现no resolver defined to resolve错误,或者接口直接502,404,需要配置 nginx resolver

server {
    server_name wfk.mohuani.com
    
    location / {
    resolver 114.114.114.114;
    proxy_pass https://wfk.mohuani.com/abc/$1/$2  ---404
    proxy_pass https://www.baidu.com/abc/$1/$2  ---502
    proxy_pass https://113.105.77.194/abc/$1/$2  ---404
    proxy_pass https://127.0.0.1/abc/$1/$2   ---404
}


不配置 resolver的情况接口的状态
proxy_pass 代理的是域名(非自身server_name),且代理的地址中包含变量,接口502
proxy_pass 代理的是ip,且代理的地址中包含变量,接口404
proxy_pass 代理的域名如果和自身server_name相同接口会404,如果和自身的server_name不相同的话接口会502
ps:个人猜测,当proxy_pass 设置为自身server_name 时,server_name会被转成127.0.0.1,导致接口报的是404,而不是502。

具体什么情况下需要配置 resolver
proxy_pass 代理的是域名或者ip,且代理的接口中包含 变量
resolver设置哪些DNS
resolver 设置公共的DNS或者公司内部的DNS都可以

resolver 114.114.114.114;
resolver 8.8.8.8;
————————————————
版权声明:本文为CSDN博主「积雪筱草」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wfk2975019671/article/details/102712440

发布了64 篇原创文章 · 获赞 26 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/moliyiran/article/details/103831952