如何正确地反向共享服务器的代理招摇

时间:2018-10-17 21:40:37

标签: java spring-boot nginx swagger swagger-ui

伙计,

我有一台同时运行应用程序的前端(角度)和后端(弹簧启动)的服务器。我能够配置nginx 1.14来将/ api下的调用重定向到端口9091(API正在侦听的本地主机:9091),并允许其他调用使用代码片段进行常规流程:

   server {
                listen 80 default_server;
                server_name example_server example_server;


                location / {
                   root /opt/myapp/html;
                   try_files $uri $uri/ /index.html;
                }

                location /api {
                   proxy_pass http://localhost:9091;
                }
        }

现在,我想让swagger在服务器中访问,它在本地运行良好。我试图在下面写两个位置块。以我的理解,它将把对/ swagger-ui的调用路由到swagger的初始页,并且将swagger进行的所有/ webjars调用路由到localhost:9091中的相应位置。

但是该页面无法加载。我在浏览器的控制台中看到一个错误:“未捕获(承诺)TypeError:无法读取null springfox.js:1的属性'1'”。我认为我的路线安排有误,但无法弄清楚。

                location /swagger-ui {
                  proxy_pass http://localhost:9091/swagger-ui.html;
                }

                location /webjars {
                   proxy_pass http://localhost:9091;
                }

我将pom.xml包含swagger.version = 2.9.0:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>${swagger.version}</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>${swagger.version}</version>
    </dependency>

有人遭受过同样的痛苦吗?

最好的问候

1 个答案:

答案 0 :(得分:0)

希望还不算太晚:当我试图达到相同的目标时,我遇到了类似的问题。问题是springfox.js从window.location.href中获取了baseUrl。它为swagger-ui.html做一个正则表达式匹配项,并接受它之前的内容(数组的第二个元素)。由于您的浏览器URL仅具有/ swagger-ui,因此正则表达式将无法正确匹配,结果数组为null,因此无法找到它的第二个元素。

查看第128行以获取更多详细信息:https://github.com/springfox/springfox/blob/master/springfox-swagger-ui/src/web/js/springfox.js