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