Сторінка технічного обслуговування на nginx, кращі практики


13

Я хочу налаштувати сервер на показ сторінки технічного обслуговування, коли він існує. Я спробував цей код і працює:

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

Але я помітив, що він буде подаватися з кодом статусу 200, і це може викликати плутанину в пошукових системах. Я думаю, що найкращою практикою було б повернення коду статусу 503. У google я знаходжу кілька релевантних сторінок про нього, як це . Однак вони використовують, якщо для переадресації, і згідно з документацією на nginx, не можна використовувати ifs.

Чи є спосіб зробити це без використання, якщо? Чи безпечно використовувати, якщо в цьому випадку?

Спасибі.

Відповіді:


7

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

Я думаю, ви маєте на увазі 503 замість 500.

вони використовують ifдля переадресації, і згідно з документацією на nginx не можна використовувати ifs.

Ні . Тільки returnце 100% безпечно всередині ifв locationконтексті.

Відповідно до документації nginx , ви можете вказати код статусу HTTP як останній аргумент try_files. Я спробував це, але не вийшло.


21

Ось що я роблю.

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

Якщо файл є, він відобразить сторінку обслуговування. Після того як ви вилучите файл, ви повернетеся до звичайного.


2
Так, це той самий код, який є за посиланням у питанні. Я насправді запитую, чи безпечно використовувати ifs в цьому випадку, оскільки його не слід використовувати відповідно до документації .
NeDark

1
І та сама документація: In some cases it's also possible to move ifs to server level (where it's safe as only other rewrite module directives are allowed within it).Сторінка помилок технічного обслуговування, як показав Майк, зазвичай встановлюється в серверному контексті.
Реган

1
Я робив те саме, за винятком того, що просто зробив 'return 503', не перевіряючи існування файлу. Таким чином я можу просто ввімкнути / відключити сайт (використовуючи "сайти доступні" / "сайти, що підтримуються" Debian) шляхом посилання та включення сторінки технічного обслуговування.
Асфанд Казі

2
Начебто це буде хітом для продуктивності: NGINX потрібно буде перевірити наявність файлу для кожного запиту ...
Марк

2
Марк, це не так, як часто доступні файли зберігаються в кеші файлової системи, який знаходиться в пам'яті.
Майк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.