Итак, я перемещаю свой сайт из 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, то запросы на файлы диск работает.
Есть идеи, как это исправить?