6

我的应用程序将在两个位置提供静态文件,一个是 /my/path/project/static,另一个是 /my/path/project/jsutils/static。

我很难让网络服务器在两个目录中查找静态内容。这是我的应用程序的 nginx 配置文件中的静态位置条目。

    location ^~ /static {
        root   /my/path/project/static;
        alias /my/path/project/jsutils/static;
       index  index.html index.htm;
    }

我收到一条错误消息:“别名”指令重复,“根”指令已在前面指定。

我不确定如何让 nginx 在这两个路径中查找静态内容。

预先感谢您的任何帮助。

4

4 回答 4

5
location ^~ /static {
    root /my/path/project/static;
    index index.html index.htm;
    try_files $uri $uri/ @secondStatic;
}

location @secondStatic {
    root /my/path/project/jsutils/static;
}

因此,首先将在 /my/path/project/static 中搜索文件,如果在那里找不到,将触发 secondStatic 位置,将根更改为 /my/path/project/jsutils/static。

于 2014-10-22T19:26:29.817 回答
2

您可以使用 try_files ( http://wiki.nginx.org/HttpCoreModule#try_files )。假设您的静态文件位于 /my/path/project/static 和 /my/path/project/jsutils/static 中。你可以试试这个:

location ^~ /static {
   root   /my/path/project;
   index  index.html index.htm;
   try_files $uri $uri/ /jsutils$uri /jsutils$uri/ =404;
}

让我知道它是否有效。谢谢!

于 2013-04-01T04:51:17.497 回答
1

只需用 nginx 语言实现您的配置:

location /my/path/project/static {
  try_files $uri =404;
}
location /my/path/project/jsutils/static {
  try_files $uri =404;
}
于 2013-04-01T15:34:11.007 回答
0

我遇到了完全相同的问题,看起来 nginx 不喜欢什么时候rootalias. 我首先删除了rootserver 部分中的声明,而是直接在 location 部分中适当地声明了rootand来修复它alias(注意注释掉的行):

server {
#    root /usr/share/nginx/html;
    location /logs/ {
        root /home/user/develop/app_test;
        autoindex on;
    }
    location /logs2/ {
#        root /home/user/branches/app_test;
        alias /home/user/branches/app_test/logs/;
        autoindex on;
    }
}
于 2014-08-15T14:24:52.163 回答