Nginx url 转发 与 proxy_pass 代理

文章目录[隐藏]

事情是这样的 , 偶然发现一个 公网开发的 eureka 公益的注册中心

为了方便调试 , 故想把我测试项目的 注册中心全换成他的 , 但是不想改 yml 的配置文件

于是 想到了用 nginx 做一个 url 转发

原 serviceUrl : http://localhost:8080/web-eureka/eureka/
现 serviceUrl : http://eureka.didispace.com/eureka/

替换规则 也比较简单 就是 把 localhost:8080/web-eureka/** 转发到 eureka.didispace.com/**

url转发

最初是这么搞的,url重定向一次

相当于 http://localhost:8080/web-eureka/eureka/** 重定向 到 http://eureka.didispace.com/eureka/**

^ 表示 url开头

(.*) 跟 $1为截取 前面 url 地址拼接起来

地址是跳转过去了 , 但 这个时候有一个问题

SpringCloud 在向注册中心注册的时候 判断 状态码 为 302 则抛出异常,注册失败

即使 ResponseBody 一样 也没用 , 于是换了另外一种方案

server {

​        listen       8080;

​        server_name  localhost;

​        rewrite ^/web-eureka/(.*) <http://eureka.didispace.com/$1> permanent;

​        \# location /web-eureka/ {

​        \# return      301   <http://eureka.didispace.com$request_uri>;

​        \# }

​        error_page   500 502 503 504  /50x.html;

​        location = /50x.html {

​            root   html;

​        }

​    }

Proxy_pass

    server {
        listen      8080;
        charset     utf-8;

        client_max_body_size 75M;

        location /web-eureka/ {
        proxy_pass http://eureka.didispace.com/;
        proxy_cache       steam;
        proxy_cache_key   $uri;
        proxy_cache_valid 200 206 3000h;
        proxy_intercept_errors on;
        error_page 301 302 307 = @handle_redirects;
        }

        location @handle_redirects {
        set $original_uri $uri;
        set $orig_loc $upstream_http_location;

        proxy_pass $orig_loc;
        proxy_cache       steam;
        proxy_cache_key $original_uri;
        proxy_cache_valid 200 206 3000h;
        }
    }

proxy_pass 直接处理完 url 在返回, 而不会将302返回由客户端处理
配合 upstream_http_location 可以 还内部处理30x响应

voidm

在黑暗中支撑和平的无名者

3 Comments

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐