【问题标题】:Nginx Configuration with Static Files under DjangoDjango下使用静态文件配置Nginx
【发布时间】:2023-04-04 02:20:01
【问题描述】:

我正在使用我的 Django 项目设置 Nginx 配置。 为了提供一些在 URL 上不显示 /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/时,会在myproject/static/foo/文件夹下显示index.html,或者如果没有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/,即myproject/static/abc/下的index.html文件

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

有什么需要修改的吗?

【问题讨论】:

  • 请出示您的settings.py文件?
  • 您是否在问为什么您的 location / 块不会自动附加 / 而您的其他 location 块会?
  • 这个配置太模糊了,丢失了重要的细节,或者这里的东西不正确。此配置中没有启用索引(列出文件)的行,并且 403 是正确的(示例 2),这意味着 直接显示某个文件夹下的文件(示例 4)实际上是不可能的。
  • 我在 settings.py 中设置了 APPEND_SLASH=True。但我想我正在尝试在没有 Django 的情况下提供这些静态文件。这就是我在 Nginx 配置中添加这些规则的原因。
  • @RichardSmith 我认为myproject.com/foo/abcmyproject.com/foo/abc 都应该匹配规则位置/foo/。所以我的问题是为什么这两个 URL 的工作方式不同。

标签: django nginx django-staticfiles nginx-config


【解决方案1】:

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

【讨论】:

  • 我在 settings.py 中设置了 APPEND_SLASH=True。但我想我正在尝试在没有 Django 的情况下提供这些静态文件。这就是我在 Nginx 配置中添加这些规则的原因。
猜你喜欢
  • 2022-06-11
  • 2021-01-12
  • 2019-05-07
  • 2014-06-07
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2015-02-19
相关资源
最近更新 更多