Перехват ошибок 404 и 50x во время проксирования

Предположим у нас есть сервер А проксирующий картинки с бекенд сервера Б. При этом мы не знаем, существует ли картинка на сервере Б. Перехватить ошибку 404, которую вернет Б и отдать дефолтную картинку можно так:

    location /img/ {
        proxy_pass http://192.168.1.100/img/;
        proxy_redirect     off;
        proxy_set_header   Host             192.168.1.100;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_intercept_errors on;
        error_page 404 = @img404;
    }

    location @img404 {
        try_files $uri /images/default.png;
    }

Дело в том, что директива proxy_intercept_errors отключена по умолчанию в прокси модуле и чтобы заработал перехват, её нужно включить. Ну а далее, при помощи директивы error_page мы можем перехватывать не только 404 ошибки, а например 50x ошибки бекенд сервера и делать любую дальнейшую логику с запросами. Например, перенаправлять их на альтернативный сервер, обеспечивая тем самым бесперебойную работу сайтов и т.п.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *