Django nginx-如果本地不存在一个媒体文件,则永久重定向到amazon s3
我最后切换到AmazonS3。但在我还没有集成s3的时候,我的网站上有一些项目发布在facebook上,这就是为什么这些帖子中仍然有旧的媒体文件URL 这些图像不再存在于Web服务器中。它们现在都在s3中 我很惭愧地问,但没有显示任何企图,在发布这个问题后,我将潜入谷歌 这是我在nginx中的媒体配置部分,大家都知道:Django nginx-如果本地不存在一个媒体文件,则永久重定向到amazon s3,django,facebook,amazon-web-services,nginx,amazon-s3,Django,Facebook,Amazon Web Services,Nginx,Amazon S3,我最后切换到AmazonS3。但在我还没有集成s3的时候,我的网站上有一些项目发布在facebook上,这就是为什么这些帖子中仍然有旧的媒体文件URL 这些图像不再存在于Web服务器中。它们现在都在s3中 我很惭愧地问,但没有显示任何企图,在发布这个问题后,我将潜入谷歌 这是我在nginx中的媒体配置部分,大家都知道: location /media { alias /var/www/mysite/application/poll/media; } 问题案例示例: facebook机
location /media {
alias /var/www/mysite/application/poll/media;
}
问题案例示例:
facebook机器人通过图像url访问该页面:www.mysite.com/media/lala.jp
。现在,我希望nginx将这些(缺少图像)url永久重定向到image.mysite.com/media/lala.jpg
,这是此图像的s3 url
你知道我怎么做吗 这对我很有用:
root /home/myuser/myproject/public/;
location @media {
return 301 $scheme://image.example.com$request_uri;
}
location /media/ {
try_files $uri @media;
}
我将收集的静态文件和媒体文件保存在django项目的公共目录中,因此media\u ROOT
将出现在本例中/home/myuser/myproject/public/media/
,但我非常确定您可以在/media/
位置中使用别名
快速解释:@media
是一个命名位置,默认情况下,nginx中的任何地方都不会使用它,但您可以自己在某个地方使用它。例如,try_文件的最后一个参数可以是命名位置
Nginx将尝试从/media/
url获取文件,当它失败时,它将回退到@media
命名位置,这是对子域的重定向
您还可以在404处理程序中使用该回退,而不是使用try\u文件
:
location /media/ {
error_page 404 = @media;
}