nginx位置块以匹配网址

时间:2016-08-15 12:00:50

标签: nginx

我想以下列方式使用nginx路由我的请求

site.com/admin -> admin/index.html
                  admin/js/assets.js // the route locations have individual assets
site.com/112dw -> dist/index.html // alphanumeric regex
                  dist/css/assets.css

我有以下nginx配置

server {
    listen 80
    root /usr/share/nginx/html;
    location /admin {
        //alias /usr/share/nginx/html/admin/;
        try_files $uri /admin/index.html; // changed based on answer below
    }
    location ~* /[a-zA-Z0-9].*$ { // rest of the routes
        add_header 'Access-Control-Allow-Origin' '*';
        //alias /usr/share/nginx/html/dist/;
        try_files $uri /dist/index.html;
    }
}

在我将配置更改为使用try_files之后,我的静态资产没有被提供,因为HTML正在搜索上面的路径一个目录。有人能指点我正确设置吗?

2 个答案:

答案 0 :(得分:0)

实现此目标的最简单方法是使用root /usr/share/nginx/html; location =/admin { try_files /admin/index.html =404; } location ~*^/[a-z0-9]+$ { try_files /dist/index.html =404; }

path

答案 1 :(得分:0)

您可以使用indextry_filesrewrite指令将请求指向index.html

您不需要使用正则表达式位置作为默认位置。事实上,您在问题中定义的方式,从不咨询/admin位置。

您应该使用root而不是alias(请参阅this document)。

有许多解决方案,可能取决于资源文件的解析方式。像这种模式的东西可能对你有用:

root /usr/share/nginx/html/dist;

location / {
    try_files $uri /index.html;
}
location /admin {
    root /usr/share/nginx/html;
    try_files $uri /admin/index.html;
}