Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django nginx别名不适用于静态文件文件夹_Django_Nginx - Fatal编程技术网

Django nginx别名不适用于静态文件文件夹

Django nginx别名不适用于静态文件文件夹,django,nginx,Django,Nginx,我不知道为什么nginx别名不起作用 为什么这条线不起作用: location /static/ { alias /home/django11/example.com/finansuinfo/static_root/; } 实际上,它可能正在工作,但我的管理页面静态文件没有提供。我得到的错误是static/admin/。。。不存在 我猜它只提供静态文件夹中的文件,而不提供由manage.py collectstatic收集所有文件的静态根文件夹中的文件

我不知道为什么nginx别名不起作用

为什么这条线不起作用:

location /static/  {
            alias /home/django11/example.com/finansuinfo/static_root/;
        }
实际上,它可能正在工作,但我的管理页面静态文件没有提供。我得到的错误是static/admin/。。。不存在

我猜它只提供静态文件夹中的文件,而不提供由manage.py collectstatic收集所有文件的静态根文件夹中的文件

这是我的配置:

server {
listen 80;
server_name example.com www.example.com;
root /home/django11/example.com/example;

location / {
    include         uwsgi_params;
    uwsgi_pass      unix:/home/django11/example.com/example/example.sock;
}

location /static/  {
    alias /home/django11/example.com/example/static_root/;
}

# Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
  expires 1M;
  access_log off;
  add_header Cache-Control "public";
}

# CSS and Javascript
location ~* \.(?:css|js|woff)$ {
  expires 1M;
  access_log off;
  add_header Cache-Control "public";
}
}

我发现alias不起作用,因为:

# Media: images, icons, video, audio, HTC
    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
      expires 1M;
      access_log off;
      add_header Cache-Control "public";
    }

    # CSS and Javascript
    location ~* \.(?:css|js|woff)$ {
      expires 1M;
      access_log off;
      add_header Cache-Control "public";
    }

你对如何修复它有什么建议吗?因为当我删除这个静态根目录时,它会工作。

查看nginx中的config文档:

位置可以由前缀字符串或正则表达式定义。正则表达式是使用前面的“~*”修饰符(用于不区分大小写的匹配)或“~”修饰符(用于区分大小写的匹配)指定的要查找与给定请求匹配的位置,nginx首先检查使用前缀字符串定义的位置(前缀位置)。其中,选择并记住匹配前缀最长的位置然后按照正则表达式在配置文件中的出现顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果找不到与正则表达式匹配的项,则使用前面记住的前缀位置的配置。

你问题中的情况可以这样解释:

当您尝试访问静态文件(我猜是css、js或媒体文件之一)时,它首先匹配前缀字符串:

location /static/  {
    alias /home/django11/example.com/example/static_root/;
}
然后,它开始搜索正则表达式,如果是css或js文件,则以下内容将得到匹配:

# CSS and Javascript
location ~* \.(?:css|js|woff)$ {
  expires 1M;
  access_log off;
  add_header Cache-Control "public";
}
其中搜索终止并使用上述配置。在此配置中,未定义别名,因此未使用别名


删除此正则表达式位置块时,将使用前缀位置的配置。而且,因为其中包括alias,所以它可以工作。

查看nginx中的config文档:

位置可以由前缀字符串或正则表达式定义。正则表达式是使用前面的“~*”修饰符(用于不区分大小写的匹配)或“~”修饰符(用于区分大小写的匹配)指定的要查找与给定请求匹配的位置,nginx首先检查使用前缀字符串定义的位置(前缀位置)。其中,选择并记住匹配前缀最长的位置然后按照正则表达式在配置文件中的出现顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果找不到与正则表达式匹配的项,则使用前面记住的前缀位置的配置。

你问题中的情况可以这样解释:

当您尝试访问静态文件(我猜是css、js或媒体文件之一)时,它首先匹配前缀字符串:

location /static/  {
    alias /home/django11/example.com/example/static_root/;
}
然后,它开始搜索正则表达式,如果是css或js文件,则以下内容将得到匹配:

# CSS and Javascript
location ~* \.(?:css|js|woff)$ {
  expires 1M;
  access_log off;
  add_header Cache-Control "public";
}
其中搜索终止并使用上述配置。在此配置中,未定义别名,因此未使用别名


删除此正则表达式位置块时,将使用前缀位置的配置。而且,因为它包括别名,所以它可以工作。

STATUC\u URL和STATIC\u ROOT变量的值是多少?你检查目录所有权了吗?这是我的settings.py文件,你的意思是检查目录所有权?STATIC_URL='/STATIC/'STATICFILES_DIRS=(os.path.join(BASE_DIR,'STATIC'),)STATIC_ROOT=os.path.join(BASE_DIR,'STATIC_ROOT')您尝试访问的静态文件是您在后面的位置配置中使用的文件扩展名之一,例如css,js或媒体文件?STATUC_URL和STATIC_根变量的值是什么?你检查目录所有权了吗?这是我的settings.py文件,你的意思是检查目录所有权?STATIC_URL='/STATIC/'STATICFILES_DIRS=(os.path.join(BASE_DIR,'STATIC'),)STATIC_ROOT=os.path.join(BASE_DIR,'STATIC_ROOT')您尝试访问的静态文件是您在后面的位置配置中使用的文件扩展名之一,例如css,js或媒体文件?也许您知道如何使alias使用expires标头?也许您知道如何使alias使用expires标头?