为 aws s3 静态和媒体文件配置 Nginx

Posted

技术标签:

【中文标题】为 aws s3 静态和媒体文件配置 Nginx【英文标题】:Configure Nginx for aws s3 static and media files 【发布时间】:2017-11-25 04:06:46 【问题描述】:

我将 aws s3 用于我的 django 应用程序的静态和媒体文件。 Gunicorn 和 nginx 被用于应用程序和代理服务器。

Nginx 设置:

server 
    listen 80;
    server_name sitename.com;

    location / 
        include proxy_params;
        proxy_pass http://unix:/home/SiteNameDjango/myproject/myproject.sock;
    

由于我将 aws s3 用于我的静态和媒体文件,我应该如何为我的静态位置配置 Nginx?还是不需要配置静态和媒体文件?

如果有帮助,这里是 aws s3 的 Django 项目设置:

STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
STATICFILES_STORAGE = 'myproject.custom_storages.StaticStorage'
DEFAULT_FILE_STORAGE = 'myproject.custom_storages.MediaStorage'
AWS_STORAGE_BUCKET_NAME = "django-bucket"
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com"
STATIC_URL = "https://" + AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com/"
MEDIA_URL = STATIC_URL + "media/"
ADMIN_MEDIA_PREFIX = STATIC_URL + "admin/"

例如网址:

https://django-bucket.s3.amazonaws.com/media/user_image/1497598249_49.jpeg

【问题讨论】:

【参考方案1】:

在 Nginx 中尝试:

location /static 
       alias /path/to/your/static;
    

在 Django settings.py 中使用:

STATIC_ROOT = '/path/to/your/static'
STATIC_URL = '/static/'

之后你需要在文件夹中收集静态数据,运行以下命令:

python manange.py collectstatic

Django 会将所有静态文件保存在指定的路径中,现在 Nginx 将加载没有 URL 的静态文件

【讨论】:

【参考方案2】:

如果您使用应用服务器来提供静态文件,那么您需要按照 mattia 提到的方式配置 nginx。

但是,如果您使用的是 s3 路径,则实际上并不需要相同的东西。根据您在运行 collectstatic 时的配置,它应该会自动在 s3 上同步您的文件。

在您使用 s3 的视图中,为了提高性能,您可以将 s3 放在 Cloudfront 后面,并从那里放置服务器内容。

【讨论】:

是的。使用云端!不只是s3,否则会很慢。【参考方案3】:

在 S3 的情况下,nginx 不负责提供静态和媒体文件,您无需进行任何配置。

【讨论】:

以上是关于为 aws s3 静态和媒体文件配置 Nginx的主要内容,如果未能解决你的问题,请参考以下文章

2019-07-04 AWS S3配置静态网站

AWS 静态网站 + 云端签名 cookie

AWS S3 代理使用方法

使用 AWS S3 for django 在 heroku 上提供静态文件?

AWS 中的静态文件配置不起作用

使用 CloudFront 和目录重定向的 AWS S3 静态网站托管