Django下带有静态文件的Nginx配置

时间:2019-05-04 10:57:20

标签: django nginx django-staticfiles nginx-config

我正在用Django项目设置Nginx配置。 为了提供一些静态文件,而网址上没有显示/static/, 我在Nginx配置中添加了一些重写规则。

这是我的Nginx配置的一部分:

    location /static/ {
        location ~* \.(png|jpg|jpeg|gif|css|js)$ {
            access_log off;
            expires 30d;
        }
        alias /path/to/myproject/static/;
    }

    location ~ ^/favicon.ico$ {
        rewrite ^/favicon.ico$ /static/favicon.ico;
    }

    location /foo/ {
        rewrite ^/foo/(.*)$ /static/abc/$1;
    }

    location /bar/ {
        rewrite ^/bar/(.*)$ /static/bar/$1;
    }

    location / {
        fastcgi_pass myproject;
        include django_fastcgi_params;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }

当我访问https://myproject.com/foo时,它将显示Django的404页。我认为这是因为Nginx中没有匹配的位置(应该以斜杠/结尾),而Django的urls.py中没有匹配的URL。

当我访问https://myproject.com/foo/时,它将在index.html文件夹下显示myproject/static/foo/,如果没有index.html,它将显示为403 Forbidden。

但是我发现...

当我访问https://myproject.com/foo/abc时,它将301永久移动到https://myproject.com/static/foo/abc/

当我访问https://myproject.com/foo/abc/时,它将直接显示https://myproject.com/foo/abc/,它是index.html下的myproject/static/abc/文件

为什么这两个URL的工作方式不同?

我应该做些修改吗?

1 个答案:

答案 0 :(得分:0)

在django项目的APPEND_SLASH=False中修改settings.py设置。有关更多信息,请参见-https://docs.djangoproject.com/en/2.2/ref/settings/#append-slash