taka

記事一覧(2)

nginxでメンテナンスページを表示する

nginxで、特定のIPアドレスからのアクセスでは通常の画面を表示し、それ以外のIPアドレスではメンテナンス画面を表示する設定を調べてみました。いくつか方法があり、nginx設定ファイルの再編集、nginxリロードなしでできる方法を試しましたが、if分岐が動作しなかったため断念しました。以下の方法ですんなりと動きました。準備1.メンテナンス用htmlファイルを用意するサーバ上のドキュメントルートに、メンテナンス用のhtmlファイルをアップロードします。 例: /var/www/html/maintenance.html準備2.メンテナンス用設定ファイルを作成するコマンド例:$ sudo vi /etc/nginx/conf.d/maintenanceファイルの内容は以下のとおりです。 設定ファイル:error_page 500 @maintenance;# Set Envset $maintenance "on";# Allow Pathsif ($uri ~ "^/exclude/") {    set $maintenance "off";}# Allow IPsif ($remote_addr ~ "xxx.xxx.xxx.xxx") {    set $maintenance "off";}if ($http_x_forwarded_for ~ "xxx.xxx.xxx.xxx") {    set $maintenance "off";}# maintenanceif ($maintenance = "on") {    return 500;}location @maintenance {    rewrite ^(.*)$ /maintenance.html break;}※「xxx.xxx.xxx.xxx」の部分には、通常画面の表示を許可するIPアドレスを入れます。準備3.nginx設定ファイルの変更コマンド例:$ sudo vi /etc/nginx/nginx.confserverコンテキスト内に以下の設定を追加します。
includeの行は、通常コメントアウトしておき、メンテナンス時のみ有効にして切り替えます。設定ファイル:server {    ...    #include /etc/nginx/conf.d/maintenance;    rewrite ^/maintenance.html(.*)$ https://$host/ permanent;    ...}実際の切替手順は以下のとおりです。1.nginx設定ファイルの変更コマンド例:$ sudo vi /etc/nginx/nginx.conf先ほど追加したserverコンテキスト内のinclude行を有効化し、nginx.confファイルを保存します。設定ファイル:server {    ...    include /etc/nginx/conf.d/maintenance;    rewrite ^/maintenance.html(.*)$ https://$host/ permanent;    ...}2.nginxのリロードコマンド例:$ sudo nginx -s reload3.メンテナンスページへの切り替えを確認実際にWebブラウザ等からアクセスを試して確認します。4.通常のページに戻すときは上記の実施1で変更したnginx設定ファイルを元に戻し(つまり有効化したinclude行をコメント化して)nginxをリロードします。そして通常のページ表示に戻ったことを確認し完了です。nginxの設定ファイル(通常時):