Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django nginx-如果本地不存在一个媒体文件,则永久重定向到amazon s3_Django_Facebook_Amazon Web Services_Nginx_Amazon S3 - Fatal编程技术网

Django nginx-如果本地不存在一个媒体文件,则永久重定向到amazon s3

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机

我最后切换到AmazonS3。但在我还没有集成s3的时候,我的网站上有一些项目发布在facebook上,这就是为什么这些帖子中仍然有旧的媒体文件URL

这些图像不再存在于Web服务器中。它们现在都在s3中

我很惭愧地问,但没有显示任何企图,在发布这个问题后,我将潜入谷歌

这是我在nginx中的媒体配置部分,大家都知道:

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;
}