Прокси 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]

Моя попытка копировать это поведение в Nginx является этим:

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

То, что происходит, - то, что каждый запрос пытается поразить Amazon S3, даже если файл существует на диске (и если он не существует на Amazon, я получаю ошибки.), Если я удаляю proxy_pass строку, затем запрашивает на файлы на диске, ДЕЙСТВИТЕЛЬНО работают.

Какие-либо идеи о том, как зафиксировать это?

13
задан Waleed Khan 30 July 2013 в 18:33
поделиться

2 ответа

Break Разве не делает совсем то, что вы ожидаете, что nginx сделает последнее, что вы спрашиваете об этом, что имеет смысл, если вы начнете копаться вокруг модулей ... но в основном защищать свой Proxy_Pass с не существует версия

if (-f $request_filename) {
    break;
}
if(!-f $request_filename)
    proxy_pass  http://s3;
}
0
ответ дан 1 December 2019 в 17:45
поделиться

Я закончил решить это, проверив, чтобы увидеть, не существует ли файл, и если да, переписывая этот запрос. Затем я справляюсь с повторным письменным запросом и выполнил прокси_пс там, например:

location /p/ {
  if (!-f $request_filename) {
    rewrite ^/p/(.*)$ /ps3/$1 last;
    break;
  }
}

location /ps3/ {
  proxy_pass http://my_bucket.s3.amazonaws.com/;
}
0
ответ дан 1 December 2019 в 17:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: