IfIsEvil以来、私はディレクティブのみを使用して構成をセットアップしようとしてきました。これによりtry_files
、メンテナンス ファイルが存在する場合、例外なく任意の URI (つまり、php ページを含む) に対してメンテナンス ページが応答コード 503 と共に表示されます。
私の構成には 2 つの問題があります。
- PHP URI の場合、メンテナンス ページは表示されません。
- maintenance.html ファイルが存在する場合、応答コード 503 は返されません。
同様の質問[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 scripts 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
ディレクティブを除いて、そのように機能することはできますか?
編集:以下はif
、サーバーセクションに含めることで現在使用しているものを使用したソリューションです。
error_page 503 @maintenance;
if (-f $document_root/maintenance.html) {
return 503;
}
location @maintenance {
try_files /maintenance.html =404;
}