Назад | Перейти на главную страницу

Страница обслуживания на nginx, лучшие практики

Я хочу настроить сервер для отображения страницы обслуживания, если она существует. Я пробовал этот код и работает:

location / {
    try_files /maintenance.html $uri $uri/ @codeigniter;
}

Но я заметил, что он будет обслуживаться с кодом состояния 200, и это может ввести в заблуждение поисковые системы. Я думаю, что лучше всего будет вернуть код состояния 503. В Google я нахожу несколько соответствующих страниц об этом, например этот. Однако они используют if для перенаправления, и, согласно документации nginx, использовать ifs небезопасно.

Есть ли способ сделать это без использования if? Безопасно ли использовать, если в этом случае?

Спасибо.

Вот что я делаю.

            if (-f $document_root/maintenance.html) {
                    return 503;
            }
            error_page 503 @maintenance;
            location @maintenance {
                    rewrite ^(.*)$ /maintenance.html break;
            }

Если файл есть, он покажет страницу обслуживания. Как только вы удалите файл, вы вернетесь в нормальное состояние.

Я думаю, что лучший способ - вернуть код состояния 500.

Я думаю, вы имеете в виду 503 вместо 500.

они используют if чтобы сделать перенаправление, и, согласно документации nginx, использовать ifs небезопасно.

Не только return является 100% безопасно внутри if в location контекст.

В соответствии с документация nginx, вы можете указать код состояния HTTP в качестве последнего аргумента для try_files. Я пробовал это, но это не сработало.

Да, важно использовать HTTP 503 для temp. перенаправляет. Вот как я это решил:

server {
        listen      80;
        server_name joergfelser.at;
        root    /var/www/joergfelser.at/;

        location / {
            if (-f $document_root/maintenance.html) {
                return 503;
           }
            ... # rest of your config, it's important to have 
            ... # the maintenance case at the very top
         }

        error_page 503 @maintenance;
        location @maintenance {
                rewrite ^(.*)$ /maintenance.html break;
        }
}

Я также написал сообщение в блоге по этой теме:
https://www.joergfelser.at/redirecting-to-a-custom-nginx-main maintenance-page/

Удачного обслуживания;)