配置Nginx以获取相对路径的内容

时间:2017-01-26 10:26:56

标签: nginx

我在同一台机器上有以下html网站(swagger-ui仪表板)(比如说在云端)

我想避免显示 somewhere_in_the_cloud 并显示另一个网址(swaggerui / train和swaggerui / planes),这就是我使用Nginx的原因。

我可以看到swagger-ui.html,但是这个网站的内容应该加载亲戚路径(css,js,...),因为Nginx在root中查找,所以没有加载。那么,我的nginx.conf文件应该如何查看swagger-ui.html网站哪个应该有效并且拥有所有静态内容?

我看不到的东西的例子,它有一个相对路径:

<link rel="icon" type="image/png" href="webjars/springfox-swagger-ui/images/favicon-32x32.png" sizes="32x32">

这是我的nginx.conf和我尝试过的但没有成功:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /swaggerui/trains {
          proxy_pass http://somewhere_in_the_cloud:8083/swagger-ui.html;
        }

        location /swaggerui/planes {
          proxy_pass http://somewhere_in_the_cloud:8087/swagger-ui.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

浏览器通过查找当前URI中的最后/来形成路径相对链接,因此相对资源文件style.css的位置如下:

/swaggerui/trains -> /swaggerui/style.css
/swaggerui/planes -> /swaggerui/style.css

如果您对初始URI强制执行/,结果将为:

/swaggerui/trains/ -> /swaggerui/trains/style.css
/swaggerui/planes/ -> /swaggerui/planes/style.css

将找到不同的资源文件。

有很多方法可以强制执行此操作。一个例子是:

location /swaggerui/ {
    rewrite ^(.*[^/])$ $1/ permanent;
    return 404;
}
location /swaggerui/trains/ {
    proxy_pass ...;
}
location /swaggerui/planes/ {
    proxy_pass ...;
}

如果缺少一个位置块,则会添加一个尾随/。以下两个块仅匹配包含第三个/的URI。