小编Coo*_*mer的帖子

Nginx代理到本地磁盘或S3上的文件

所以我将我的网站从Apache转移到Nginx,我遇到了这个场景的问题:

用户上传照片.此照片已调整大小,然后复制到S3.如果磁盘上有合适的空间(或者文件无法传输到S3),则保留本地版本.

我想要请求这些图像(例如http://www.mysite.com/p/1_1.jpg)首先查看p /目录.如果不存在本地文件,我想将请求代理到S3并呈现图像(但不是重定向).

在Apache中,我这样做:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^p/([0-9]+_[0-9]+\.jpg)$ http://my_bucket.s3.amazonaws.com/$1 [P,L]
Run Code Online (Sandbox Code Playgroud)

我试图在Nginx中复制这种行为是这样的:

location /p/ {
    if (-e $request_filename) {
        break;
    }
    proxy_pass http://my_bucket.s3.amazonaws.com/;
}
Run Code Online (Sandbox Code Playgroud)

会发生什么事情是每个请求都尝试命中Amazon S3,即使该文件存在于磁盘上(如果它在亚马逊上不存在,我也会收到错误.)如果我删除了proxy_pass行,那么磁盘DO上的文件请求就会起作用.

有想法该怎么解决这个吗?

proxy nginx amazon-s3

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

amazon-s3 ×1

nginx ×1

proxy ×1