【问题标题】:Nginx not serving static files for Django in Amazon EC2 - 404 ErrorNginx 不为 Amazon EC2 中的 Django 提供静态文件 - 404 错误
【发布时间】:2019-08-21 09:49:04
【问题描述】:

我对 Django 开发和 Nginx 配置还很陌生。 使用 gunicorn 和 Nginx 将应用程序部署到 Amazon EC2 中后,页面加载时不会包含静态文件(css、js 等)。

我怀疑 Nginx 无法加载静态文件。我花了几个小时尝试调整 Nginx 配置,并阅读其他答案,但仍然没有运气。

感谢任何正确方向的提示。

/etc/nginx/sites-available/sbs

server{
        listen 80;
        server_name my_server_host;
        location = /favicon.ico { 
            access_log off; log_not_found off; 
        }

        location /static/ {
            autoindex on;
            root /home/ubuntu/secure-banking-system/sbs/static/;
        }
        location / {
            include proxy_params;
            proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
        }
}

settings.py

STATIC_ROOT = '/home/ubuntu/secure-banking-system/sbs/static'

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'sbs/static')
]

我已经验证了静态文件在/home/ubuntu/secure-banking-system/sbs/static/中可用

文件结构

secure-banking-system
|
|──sbs
   |
   |────│ 
        │   
        ├── sbs
        │   |
        │   └── static
        │       ├── css
        │       ├── images
        │       └── js
        |
        ├── static
            ├── css
            ├── images
            └── js

【问题讨论】:

  • 确定一下,你执行python manage.py collectstatic了吗?
  • 还可以尝试在您的 sbs 文件中的 /static/ 位置块中删除此语句 root /home/ubuntu/secure-banking-system/sbs/static/; 最后的斜杠。
  • @Paandittya 我确实运行了 collectstatic。曾尝试删除尾部斜杠。感谢您的回复。但它仍然不加载文件。
  • 我认为它必须在开发环境中正常工作?
  • 删除root /home/ubuntu/secure-banking-system/sbs/ 中的static。此外,假设BASE_DIR/home/ubuntu/secure-banking-system/,您将STATIC_ROOTSTATICFILES_DIRS 一起使用是错误的。有关this SO questionSTATICFILES_DIRS docs 的更多信息。

标签: django nginx amazon-ec2 gunicorn static-files


【解决方案1】:

root 指令不会从请求中删除 /static 部分。所以请求

http://my_server_hos/static/foo/test.png

会让 nginx 在

中查找文件

/home/ubuntu/secure-banking-system/sbs/static/static/foo/test.png.


了解,/static 位置的配置应该是:

       location /static {
            autoindex on;
            root /home/ubuntu/secure-banking-system/sbs;
       }

另一种方法是使用alias 指令:

       location /static {
            autoindex on;
            alias /home/ubuntu/secure-banking-system/sbs/static;
       }

【讨论】:

    【解决方案2】:

    这最终对我有用。我还清除了 Python 缓存 文件和 *.pyc,因为我在 settings.py 中的更改没有反映出来。

    /etc/nginx/sites-available/sbs

    server{
            listen 80;
            server_name my_server_host;
    location = /favicon.ico { access_log off; log_not_found off; }
    
        location /static/ {
            alias /home/ubuntu/secure-banking-system/sbs/static/;
        }
    location / {
            include proxy_params;
            proxy_pass http://unix:/home/ubuntu/secure-banking-system/sbs/sbs.sock;
        }
    }

    settings.py

    STATIC_ROOT = os.path.join(BASE_DIR, 'sbs/static/')
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'sbs/static/')
    ]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-30
      • 2017-09-04
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2020-09-14
      • 1970-01-01
      相关资源
      最近更新 更多