nginx 同一个location 如何配置2个alias?

如何能让下面的同一个目录,同时在2个真实目录中进行查找对应文件?


  location ^~ /static/ {
#    root  D:/PhpstormProjects/GitHub/zhgh/;
    alias  D:/PhpstormProjects/GitHub/zhgh/node_modules/;
    alias  D:/PhpstormProjects/GitHub/zhgh/static/;
  }
阅读 3.9k
2 个回答

上面的答案我测试了不行。

nginx 下 @name 形式的 location 中不能够使用 alias

经过我多次尝试,这样的配置应该最符合你的要求

    location ~ ^/(?:static)/(.*) {
        root D:/PhpstormProjects/GitHub/zhgh/;
        try_files $uri /node_modules/$1 =404;
    }

location 需要用正则,把 static 后面的路径提取出来,作为变量 $1

指定 root 路径。

try_files $uri /node_modules/$1 =404; 含义:
先尝试 D:/PhpstormProjects/GitHub/zhgh/static/index.html
再尝试 D:/PhpstormProjects/GitHub/zhgh/node_modules/index.html
都找不到返回 404

你这个问题复杂就复杂在,如果是两个完全没有关联性的路径,例如一个在 /A/static,另外一个在 /B/node_modules,实现方法就不是这样了,我一开始是按没有关联性去找解决方法的,但是没找到方法。

更新

不使用正则的方式,需要先用 aliasnode_modules,最后用 rootstatic先后顺序不能变

     location ^~ /static {
         alias D:/PhpstormProjects/GitHub/zhgh/node_modules/;
         try_files $uri $uri/ @a1;
     }
     location @a1 {
         root D:/PhpstormProjects/GitHub/zhgh/;
     }
这种方法依然有着局限性,如果你的请求上下文,不是 node_modulesstatic 中的任何一个,就无法实现,也就是说 nginx 我目前没有找到能够在任意两个目录查找文件的方式。
location /aaa {
    alias xxxx;
    try_files $uri $uri/ @a1;
}
location @a1 {
    alias bbbb;
}

未经测试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏