Nginx — как проксировать все 404 запроса на другой сервер

Я пытаюсь проксировать все мои 404 запросы на резервный сервер, а также для 404, возвращаемых php-скриптом хост-сервера.

recursive_error_pages off;
error_page 404 = @missing;

location @missing {
    proxy_pass http://anotherserver;
    proxy_read_timeout 60s;
}

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ /index.php$is_args$args;
}

Поэтому всякий раз, когда приложение php возвращает 404, оно изящно возвращается к другому серверу, но проблема в том, что оно не может передавать URI, поскольку оно находится внутри именованного блока.

Как настроить nginx для прокси-сервера на другой сервер только тогда, когда приложение хост-сервера возвращает 404?


person Vinay Aggarwal    schedule 29.04.2018    source источник
comment
Пробовали ли вы использовать апстрим nginx. PS: я считаю, что этот вопрос больше подходит для суперпользователя или сбоя сервера.   -  person Cemal    schedule 29.04.2018


Ответы (1)


Вы можете передать другой сервер в блоке местоположения, используя nginx upstream:

recursive_error_pages off;
error_page 404 = @missing;

upstream anotherserver404 {
    server anotherserver.only404.com:80;
}

location @missing {
    proxy_pass http://anotherserver404;
    proxy_read_timeout 60s;
}

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ /index.php$is_args$args;
}
person Cemal    schedule 29.04.2018