发现django静态文件的Nginx 404文件未找到错误

时间:2016-01-20 03:43:43

标签: nginx django-staticfiles

我在尝试访问静态文件文件时遇到错误,但我正在尝试访问static/js/main.js文件,nginx正在寻找static/js/main.js/index.html ..以下是错误同样的。

  

2016/01/20 03:31:01 [错误] 2410#0:* 1   “/home/ubuntu/vnv/near/near/static/js/main.js/index.html”不是   找到(20:不是目录),客户端:162.111.50.122,服务器:my.domain.com,请求:“GET /static/js/main.js/ HTTP / 1.1”,主机:“my.domain.com”

以下是我的服务器块..

server {
    listen 80;
    server_name my.domain.com;

    # location ~ ^/(static/.*) {
    location ~ /static {
        root /home/ubuntu/vnv/near/near; # near consist of static directory
    }

    location ~ / {
        proxy_headers_hash_max_size 51200;
        proxy_headers_hash_bucket_size 6400;
        proxy_pass http://near_server;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

此外,它会在URI的末尾附加/,这可能是什么问题?

注意:我已经完成了与此相关的大多数答案,但我找不到适合这种情况的解决方案。

1 个答案:

答案 0 :(得分:1)

如果请求URI以/结尾,nginx会将其视为目录并应用索引规则。除非被覆盖,否则nginx会查找index.html文件。

从错误消息中我们看到GET请求是针对/static/js/main.js/的。那么问题是/附加到请求URI?

如果您现在查看访问日志,您将看到包含GET /static/js/main.js/ HTTP/1.1 404的行,其中列出了HTTP响应代码。

如果上面的行包含GET /static/js/main.js HTTP/1.1 3xx,那么nginx会添加额外的/。如果没有这样的行,那么客户端会询问错误的URL,您需要在其他地方寻找问题的解决方案。

与您的问题无关:当前缀 location块似乎更合适时,为什么使用正则表达式 location块?

您应该使用:

location /static { ... }
location / { ... }

您现有的配置效率低下,并且匹配字符串中嵌入/static的URI,例如:/something/static.php

请参阅this document了解location语法和处理规则。