• Nginx: код 503 в конфиге по факту оказывается 302. Почему?

    @miksir
    IT
    Так как у вас URL в error_page указан с http и доменом - подразумевается внешний редирект. Отсюда и 302. Для получения того, что вы хотите, пишите
    error_page 503 /maintrance.html;
    Так же, если вы хотите получить 200 в ответе, не обязательно описывать отдельный локейшн, можно решить все той же error_page, это будет так
    error_page 503 =200 /maintrance.html;
    И тогда location = /maintrance.html можно выкинуть.

    UPD: Да, ступил. Так как error_page делает внутренний редирект, то если нет отдельного location /maintrance.html - сервер снова попадает в location / и получается бесконечный цикл редиректов. Так что в таком случае location /maintrance.html нужен.

    Попутно хочу акцентировать внимание на другом способе, более популярном, особенно если нам не нужно выдавать 503.
    location / {
        root   /usr/share/nginx/html;
        index index.html index.htm;
        try_files /maintrance.html $uri $uri/ =404;
    }

    try_files перебирает указанные аргументы пока не встретит существующий на диске. Т.е. в такой конфигурации достаточно создать /usr/share/nginx/html/maintrance.html - начинает выдаваться он, если его удалить - начинают работать обычные запросы (параметр $uri и $uri/).
    Ответ написан
    2 комментария