Nginx配置中的静态位置有多个位置

7

我有两个地方需要我的应用程序提供静态文件服务,一个是/my/path/project/static,另一个是/my/path/project/jsutils/static。

我很难让Web服务器查找这两个目录中的静态内容。以下是我在nginx配置文件中为我的应用程序添加静态资源位置的条目。

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

我遇到了一个错误:“别名”指令重复,“根目录”指令已经在之前指定。

我不确定如何让Nginx同时查找这两个路径的静态内容。

提前感谢您的任何帮助。

4个回答

6
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。


3
你可以使用 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;
}

请告诉我它是否有效。谢谢!


2
只需使用nginx语言实现您的配置即可:
location /my/path/project/static {
  try_files $uri =404;
}
location /my/path/project/jsutils/static {
  try_files $uri =404;
}

两种解决方案都没有奏效。我认为我的 Django 应用程序路径可能有误。当我使用内部 Web 服务器在本地运行应用程序时,这两个路径都是可访问的。 - pratik
可能我没有理解你的意思。请说明一下这种静态文件的请求行是什么样子的。 - Alexander Altshuler

0

我曾经遇到过完全相同的问题,看起来nginx不喜欢rootalias覆盖。我通过首先删除服务器部分内的root声明,并在位置部分直接适当地声明rootalias来解决这个问题(请注意注释掉的行):

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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接