Хитрое перенаправление по 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