Так как IfIsEvil Я пытался настроить конфигурацию с помощью директивы try_files
только для того, чтобы страница обслуживания отображается вместе с кодом ответа 503 для любого URI без исключения, то есть включая страницы php, если существует файл обслуживания.
В моей конфигурации есть две проблемы:
- Страница обслуживания не отображается для URI php.
- Код ответа 503 не возвращается, если файл maintenance.html существует.
Я видел похожие вопросы [1], [2] но не с решением, которое использует только try_files
(в отличие от использования директивы if
) и безоговорочно обслуживает страницу обслуживания с кодом ответа 503, если присутствует соответствующий файл. Возможно ли такое решение?
Ниже мой текущий неработающий файл conf. Он не содержит настройки кода ответа 503, потому что я не понимаю, куда он должен идти, чтобы он работал, как описано выше.
worker_processes 1;
error_log /var/log/nginx/error.log debug;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
index index.php index.html index.htm;
server {
listen 80;
server_name rpi;
root /www;
location / {
try_files /maintenance.html $uri $uri/ /index.php?$args;
# pass the PHP скриптs to FastCGI server
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
}
}
Я предполагаю, что мой вопрос можно альтернативно сформулировать следующим образом: может ли try_files
работать как структура управления if
? Если это не само по себе, может ли оно с указанной целью быть объединено с другими директивами, чтобы действовать как таковое, исключая директиву if
?
edit: Ниже приведено решение с использованием if
, которое я сейчас использую, включив его в раздел сервера:
error_page 503 @maintenance;
if (-f $document_root/maintenance.html) {
return 503;
}
location @maintenance {
try_files /maintenance.html =404;
}