nginx反向代理Upstream名字返回到Swagger的base url中了

介绍


在用Nginx转发请求到sprint boot上游服务的时候,有一个配置项,如果处理不好,会导致在swagger里面无法访问API。下面来看一下实例

首先来看问题的现象,通过nginx能够访问到swagger-ui的页面


在这里插入图片描述

并且,直接url 访问API也正常,如下


在这里插入图片描述

但是,在swagger-ui界面通过输入参数去请求API,就会得不到响应结果,如下


在这里插入图片描述

我们在这里观察到request url里面的地址里面的Base URL地址都是“code404_icu”,这并不是nginx的地址也不是上游服务的地址,而是nginx.conf配置中upstream定义的变量名,下面是nginx.conf的部分内容:

server
     {
        listen   18067;
        location / {
                proxy_pass http://code404_icu;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_redirect off ;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                fastcgi_param  SCRIPT_NAME        "";
                client_max_body_size    10m;
                more_clear_headers "Access-Control-Allow-Origin";
                more_clear_headers "Access-Control-Allow-Credentials";
                more_clear_headers "Access-Control-Allow-Headers";
                more_clear_headers "Access-Control-Allow-Methods";
        }
    access_log  logs/dfs_access.log  main;
    error_log  logs/dfs_error.log crit;
  }

也就是说swagger将nginx转发的upstream的名字作为base url来处理请求,显然这是得不到结果的。

办法就是告诉swagger正确的请求地址


这需要在nginx.conf中设置请求头,将原始的请求地址和端口传递到转发的服务去,具体设置如下:
添加proxy_set_header Host $host:$server_port;

server
     {
        listen   18067;
        location / {
                proxy_pass http://code404_icu;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header    X-Real-IP       $remote_addr;
                proxy_set_header	Host	$host:$server_port;
                proxy_redirect off ;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                fastcgi_param  SCRIPT_NAME        "";
                client_max_body_size    10m;
                more_clear_headers "Access-Control-Allow-Origin";
                more_clear_headers "Access-Control-Allow-Credentials";
                more_clear_headers "Access-Control-Allow-Headers";
                more_clear_headers "Access-Control-Allow-Methods";
        }
    access_log  logs/dfs_access.log  main;
    error_log  logs/dfs_error.log crit;
  }

重启nginx,再从swagger-ui访问一下API,这次返回正常,地址也是nginx的地址了。

在这里插入图片描述

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/1181.html

发表评论

登录后才能评论