Re[2]: Интелектуальный try_files по сети
Михаил Монашёв
postmaster на softsearch.ru
Ср Дек 14 12:59:13 UTC 2011
Здравствуйте, Maxim.
>> >> Было бы удобно иметь возможность прописывать вот такую логику:
>> >> поискать файл на этих бэкендах, а если там не нашлось, то на этих.
>> >> Это удобно в стандартной задаче, когда хочется показать только что
>> >> загруженную фотку. Форму удобно постить на сервер с апачами,
>> >> картинку раздавать с кэширующего сервера, а хранить картинку на
>> >> сервере с файловым архивом. Т.е. сначала картика кладётся на
>> >> апаческий хост, а потом в фоне копируется на хост с файловым
>> >> архивом.
>> >>
>> >> Сейчас подобную схему можно сделать двумя способами: редиректить
>> >> юзеров, чтобы браузер сам обходил все возможные сервера, или
>> >> городить на кэширующем сервере кучу if-ов.
>>
>> > А чем тебе старый добрый вариант с "error_page 404 = @fallback" не
>> > угодил?
>>
>> > Собственно, от try_files его по большому счёту отличает только то,
>> > что try_files писать чуть проще для разных типичных случаев. (Ну и
>> > тем, что в отличие от try_files там нет race condition при проверке
>> > и отдаче файлов, но это тема, интересная только отдельным маньякам
>> > вроде меня.)
>>
>> Под кучей if-ов и имел ввиду твой старый добрый вариант. Неправильно
>> выразился, прошу прощения. Просто хотел заметить, что когда бэкендов
>> десяток, то конфиг не блещет изяществом и похож на копипасту. Кроме
>> того такая конструкция не позволяет всякие оптимизации типа выполнения
>> сразу 10 запросов параллельно вместо последовательного перебора. И
>> кажется, что работа с бэкендами - это ближе к апстриму.
> Исходная задача "посмотреть файл на этих бекендах, а если не
> нашлось, то на этих" - не параллелится.
Параллелится "посмотреть файл на этих бекендах" и "то на этих".
>> Ещё придумал третий вариан решения. Задача сейчас симпатичнее
>> решается, если отделить статусы, вызывающие fail, от статусов,
>> приводящих к выбору следующего бэкенда. Что-то вроде:
>>
>> proxy_next_upstream [error | timeout | invalid_header |
>> http_500 | http_502 | http_503 | http_504 | http_404[=not_fail] |
>> off]
>>
>> Тогда в @fallback можно писать сразу апстрим вместо кучи @fallback-ов
>> с каждым бэкендом в отдельности. И сразу появляется лаконичность:
>> попробовали эту группу серверов, если там нету, то пробуем эту.
> Сейчас так и есть. Если тебе нужно в рамках группы бекендов
> поискать файл, то
> proxy_next_upstream http_404;
> эту проблему решает (и не объявляет бекенд мёртвым, если он
> возвращает 404, а просто переходит к следующему бекенду).
Сорри, торможу.
--
С уважением,
Михаил mailto:postmaster at softsearch.ru
Подробная информация о списке рассылки nginx-ru