Nginx具有不同根的多个位置

时间:2017-06-10 22:34:54

标签: nginx nginx-location

我有非常简单的nginx配置,里面有3个位置。他们每个人都有自己的根目录+我以后应该可以轻松添加另一个目录。

我想要的是什么:

请求/admin =>位置^/admin(/|$)

请求/admin/ =>位置^/admin(/|$)

请求/admin/blabla =>位置^/admin(/|$)

请求/client =>位置^/client(/|$)

请求/client/ =>位置^/client(/|$)

请求/client/blabla =>位置^/client(/|$)

请求/blabla =>位置/

请求/admin-blabla =>位置/

请求/client-blabla =>位置/

实际结果:

所有请求都转到/位置。

我使用不同的别名,try_files,root和regex的组合尝试了来自docs,stackoverflow和其他来源的许多不同建议,但没有任何方法可以帮助我。

只有当我尝试仅使用return 200 'admin';return 200 'front'时,它才能正常运行。

最小配置:

server {
    listen 80;
    index index.html;

    location / {
        root /var/www/html/www_new/front;
        try_files $uri $uri/ /index.html;
    }

    location ~ ^/admin(/|$) {
        root /var/www/html/www_new/admin;
        try_files $uri $uri/ /index.html;
    }

    location ~ ^/client(/|$) {
        root /var/www/html/www_new/client;
        try_files $uri $uri/ /index.html;
    }
}

目录结构:

  • /管理
  • /客户端
  • /前

谢谢

1 个答案:

答案 0 :(得分:3)

当您更改根目录时,它仍然包含目录名称,因此您要做的只是设置location /的根目录。您也不需要/admin上的任何其他正则表达式,因为位置修饰符~已经告诉nginx'以'开头的任何内容。

这适用于您的用例:

server {
    listen 80;
    index index.html;

    location / {
        root /var/www/html/www_new/front;
        try_files $uri $uri/ /index.html;
    }

    location ~ ^/admin {
        root /var/www/html/www_new; # the directory (/admin) will be appended to this, so don't include it in the root otherwise it'll look for /var/www/html/www_new/admin/admin
        try_files $uri $uri/ /admin/index.html; # try_files will need to be relative to root
    }
}