Здравствуйте, Andrei.
AN> Добрый день
AN> Игорь, есть ли возможность обработать ошибку backend'a (например 404) с
AN> помощью директивы error_page на nginx ?
AN> Пробовал ее ставить на location который проксируется - не помогает :(
У меня ошибки бэкенда обрабатываются так:
location / {
proxy_pass ...;
...
error_page 404 /errors/404.html;
...
}
location /errors/ {
root /usr/local/nginx/html/;
...
}
Очень странно. Вот мой конфиг :
location / {
proxy_pass http://127.0.0.1:8001/;
client_max_body_size 32k;
client_body_buffer_size 32k;
proxy_connect_timeout 10;
proxy_send_timeout 10;
proxy_read_timeout 10;
proxy_preserve_host off;
proxy_set_x_real_ip off;
proxy_add_x_forwarded_for off;
proxy_header_buffer_size 8k;
proxy_buffers 1000 8k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
error_page 404 /errors/404.gif;
error_page 502 /errors/404.gif;
}
location /errors/ {
root /home/www/nginx/html;
}
на 502 ошибку (backend лежит) 404.gif выдается,
на 404-ю - нет, выдается стандартный html "<h1>Not Found</h1>"
Где я чего не понимаю ?
Для proxy сейчас нет директивы proxy_redirect_errors [on|off], аналогичной
fastcgi_redirect_errors [on|off]. Поэтому ошибки, возникающие при работе
с бэкендом, обрабатываются директивой error_page, а ошибки, возвращаемые
бэкендом, - нет. В ближайшее время будет, сейчас я занят поддержкой
параллельного выполнения подзапросов, необходимых для SSI.
Кстати, лучше задавать
error_page 502 =200 /errors/404.gif;
тогда MSIE не будет показывать 404.gif, как битую картинку.
Игорь Сысоев
http://sysoev.ru