Хитрое перенаправление по 404 ошибке
Igor Sysoev
is at rambler-co.ru
Thu Jun 23 14:16:02 MSD 2005
On Thu, 23 Jun 2005, Andrew Velikoredchanin wrote:
> Igor Sysoev wrote:
>> On Thu, 23 Jun 2005, Andrew Velikoredchanin wrote:
>>
>>> Вот такая задача есть:
>>>
>>> На странице отображается картинка.
>>> Она берется с бэкэндов с их перебором пока не найдется.
>>> Если она не нашлась - нужно по 404 ошибке перенаправить запрос на бэкэнд
>>> на cgi скрипт pic404.cgi на бэкэнде, который должен выдать картинку в
>>> зависимости от url оригинальной картинки.
>>>
>>> Это возможно?
>>>
>>> Больше всего меня интересует, получу-ли я в pic404.cgi оригинальный урл?
>>
>>
>> Оригинальный URI живёт в переменной $request_uri. Её можно передавать
>> с помощью proxy_set_header и fastcgi_param.
>>
>> error_page 404 /pic404.cgi;
>> location = /pic404.cgi {
>> internal;
>> proxy_pass http://backend/pic404.cgi;
>> proxy_set_header X-URI $request_uri;
>> }
>
> Что-то не получается. :(
>
> Вот примерно что в конфиге фронтэнда:
>
> location / {
> proxy_pass http://back.cluster/;
> proxy_next_upstream error timeout invalid_header http_500 http_404;
> ...
> }
>
> location /thumbnails/ {
> proxy_pass http://back.cluster:81/thumbnails/;
> proxy_next_upstream error timeout invalid_header http_500 http_404;
> expires 30d;
> error_page 404 /pic404.cgi;
> ...
> }
>
> В таком варианте при запросе несуществующей картинки из /thumbnails/ он
> почему-то не переходит на 404 страницу на фронтэнде, а выдает 404 страницу,
> которую выдал бэкэнд (я это заметил, т.к. на бэкэнде у меня стоит старая
> версия nginx, которая и должна выдавать эти картинки).
>
> Это глюк или я что-то не так прописал?
Нужно ещё добавить
location /thumbnails/ {
proxy_redirect_errors on;
для того, чтобы error_page обрабатывал ошибки от прокси.
Для FastCGI нужно "fastcgi_redirect_errors on".
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list