【Azure】App ServiceのWebサーバ「NGINX」をカスタマイズする方法Tech TIPS

Azure App ServiceのLinux版を使っていて、AzureポータルやCLI、PowerShellなどではできない細かい設定を変更したいと思ったことはないだろうか? 実はApp Service on Linux内蔵のNGINXの設定ファイルを書き換えることで対応できる場合がある。その方法と注意点を解説する。

» 2025年02月20日 05時00分 公開
[島田広道デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

Azure App Service(Linux版)のNGINXをカスタマイズ

対象:Azure App Service on Linux(NGINX内蔵)

 Azureの「App Service」は自動的にパフォーマンスをスケールできるとともに、割と細かい設定も可能なWeb/アプリケーションサーバのサービスである。

 とはいえ、GUI(Azureポータル)やAzure CLI、Azure PowerShellなどで変更できる設定範囲にも限界がある。特にレンタルサーバなどの既存サイトを移す際には、BASIC認証やGZIP圧縮などといった設定を変えたくなることがあるだろう。

 そのような場合、App Serviceの内蔵Webサーバの設定ファイルを直接書き換えることで対応できることがある。本Tech TIPSでは、その基本的な手順と注意点を説明する。

 対象は、App Service on Linux内蔵のNGINXとする。App Service on WindowsのIISや、古いApp Service on LinuxのApacheについては対象外とさせていただく。また以下では、NGINXの設定ファイルやシェルスクリプト、シンボリックリンクについて、ある程度知っていることを前提としている。

 App ServiceのランタイムスタックはPHP 8.3としている。その他のスタックではスタートアップスクリプト(後述)の名称や内容が異なる、といった違いがあるので注意していただきたい。

 BASIC認証などの具体的な実装については、別の記事で解説する予定だ。

■執筆時の各種ツール/モジュール/APIのバージョン

手順1――NGINXのデフォルトの設定ファイルを[/home/]ディレクトリ以下にコピーする

 App ServiceのNGINXの設定ファイルは、[/etc/nginx/]ディレクトリに格納されている。設定を書き換えるなら、次の3つのファイルのいずれかが対象となることが多い。

  • nginx.conf: 主たる設定ファイル
  • sites-available/default: サイトに関する設定ファイル(以下、「サイト設定ファイル」)
  • mime.types: MIMEタイプを定義しているファイル

 ここでは[/etc/nginx/sites-available/default]ファイルを書き換える前提で説明しよう。

 まず、Tech TIPS「【Azure】App Service on LinuxにSSHで接続する方法と注意点(WebSSH編)」を参考にして、App ServiceにSSHで接続する。次に、以下のコマンドラインを実行して、[/home]ディレクトリ以下にデフォルトの設定ファイルをコピーする。以下に例示している[custom]ディレクトリは別の名前でもよい。

mkdir -p /home/custom/etc/nginx/sites-available
cp -pv /etc/nginx/sites-available/default /home/custom/etc/nginx/sites-available/

NGINXのデフォルトの設定ファイルを/home/ディレクトリ以下にコピーしているところ NGINXのデフォルトの設定ファイルを/home/ディレクトリ以下にコピーしているところ

 わざわざ[/home]ディレクトリ以下にコピーしているのは、App Serviceが再起動(コンテナが再デプロイ)されると、[/etc]ディレクトリなど[/home]ディレクトリ以外のファイルは初期化されて元に戻ってしまうためだ。そのため、書き換えたまま永続的に維持したいファイルは、[/home]ディレクトリ以下に配置する必要がある。

 筆者は、書き換えたい(差し替えたい)設定ファイルがあるディレクトリの構造を、[/home/custom/]というディレクトリ以下にそのまま複製している。例えば[/etc/nginx/]は[/home/custom/etc/nginx/]という具合だ。

手順2――設定ファイルを書き換える

 デフォルトの設定ファイルをコピーしたら、それをテキストエディタなどで書き換える。FTPなどでダウンロードしてローカルPCで編集してもよいし、上記のSSHの画面からコピーしてデプロイ用リポジトリ内のファイルにペーストしてもよい(もちろん編集後に[/home]ディレクトリ以下に書き戻すかデプロイすること)。

 参考までに、執筆時点のデフォルトのサイト設定ファイルを以下に記す。

server {
    #proxy_cache cache;
    #proxy_cache_valid 200 1s;
    listen 8080;
    listen [::]:8080;
    root /home/site/wwwroot;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com
    port_in_redirect off;

    location / {            
        index  index.php index.html index.htm hostingstart.html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /html/;
    }
    
    # Disable .git directory
    location ~ /\.git {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Add locations of phpmyadmin here.
    location ~* [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.[Pp][Hh][Pp])(|/.*)$;
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_intercept_errors on;
        fastcgi_connect_timeout         300
        fastcgi_send_timeout           3600
        fastcgi_read_timeout           3600;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
}

デフォルトの[/etc/nginx/sites-available/default]の内容(PHP 8.3スタックの場合)

手順3――書き換えた設定ファイルをNGINXに読み込ませて動作を確認する

 設定ファイルの編集を完了したら、元の設定ファイルへシンボリックリンクを張る。

ln -snf /home/custom/etc/nginx/sites-available/default /etc/nginx/sites-available/default

 ここで、書き換えた設定ファイルが正しいかどうかNGINXに検証させよう。

nginx -t

 正常なら後述の画面のようなメッセージが出力されるはずだ。間違いがあれば、エラーメッセージが表示されるので設定ファイルを修正すること。

 検証に成功したら、NGINXに設定ファイルの再読み込みを実行させよう。

nginx -s reload

 ここでApp Serviceの再起動をしてはいけない。シンボリックリンクがなくなり、元の設定ファイルに戻されてしまうからだ。

書き換えた設定ファイルをNGINXに読み込ませて動作確認しているところ 書き換えた設定ファイルをNGINXに読み込ませて動作確認しているところ

 上記画面でエラーが表示されなかったら、設定ファイルを書き換えた効果が表れているかどうかを確認する。

手順4――startup.shを書き換えてNGINXの設定ファイルを永続的に差し替える

 動作確認が済んだら、前述のシンボリックリンク作成のコマンドラインを「スタートアップスクリプト」に組み込んで、NGINXの設定ファイルを永続的に差し替える。スタートアップスクリプトはApp Serviceの起動時(コンテナのデプロイ直後)に実行されるシェルスクリプトである。

 まず、スタートアップスクリプトのデフォルトのパスを、以下の画面のように調べて確認する。

【Azureポータル】App Service on Linuxのスタートアップスクリプトのパスを確認する 【Azureポータル】App Service on Linuxのスタートアップスクリプトのパスを確認する

az webapp config show -g <リソースグループ名> -n <App Service名> -s <スロット名> --query "appCommandLine"

【Azure CLI】App Service on Linuxのスタートアップスクリプトのパスを確認する
※Microsoftのレファレンス: az webapp config showコマンド

(Get-AzWebApp -ResourceGroupName -ResourceGroupName <リソースグループ名> -Name <App Service名>).SiteConfig.AppCommandLine

【Azure PowerShell】App Service on Linux(Productionスロット)のスタートアップスクリプトのパスを確認する
※Microsoftのレファレンス: Get-AzWebAppコマンドレット

(Get-AzWebAppSlot -ResourceGroupName -ResourceGroupName <リソースグループ名> -Name <App Service名> -Slot <スロット名>).SiteConfig.AppCommandLine

【Azure PowerShell】App Service on Linux(Production以外のスロット)のスタートアップスクリプトのパスを確認する
※Microsoftのレファレンス: Get-AzWebAppSlotコマンドレット

 パスが確認できたら、以下のようにスタートアップスクリプトを記述して、上記のパスに格納する。

#!/usr/bin/env bash

# 設定ファイルを変更または差し替える
ln -snf /home/custom/etc/nginx/ sites-available/default /etc/nginx/sites-available/default

# NGINXに設定ファイルを再度読み込ませる
nginx -s reload

startup.shでNGINXの設定ファイルを差し替える例

手順5――App Serviceを再起動して設定ファイルの書き換えが反映されたことを確認する

 最後にApp Serviceを手動で再起動して、正しく設定ファイルが差し替えられるかどうかを確認しよう。

App Serviceを再起動する App Serviceを再起動する

az webapp restart -g <リソースグループ名> -n <App Service名> -s <スロット名>

【Azure CLI】App Serviceを再起動する
※Microsoftのレファレンス: az webapp restartコマンド

Restart-AzWebApp -ResourceGroupName <リソースグループ名> -Name <App Service名>

【Azure PowerShell】App Service on Linux(Productionスロット)を再起動する
※Microsoftのレファレンス: Restart-AzWebAppコマンドレット

Restart-AzWebAppSlot -ResourceGroupName <リソースグループ名> -Name <App Service名> -Slot <スロット名>

【Azure PowerShell】App Service on Linux(Production以外のスロット)を再起動する
※Microsoftのレファレンス: Restart-AzWebAppSlotコマンドレット

 再起動して1~3分ほど待ってからSSHで接続し直して、以下のようにシンボリックリンクが設定されているかどうかを確認する。

NGINXの設定ファイルが差し替えられていることを確認する NGINXの設定ファイルが差し替えられていることを確認する

 手動で確認したときと同じくシンボリックリンクが設定されていれば、設定ファイルの差し替えは成功しているはずだ。後は、設定ファイルを書き換えた効果が表れているかどうかも確認しよう。

【注意】設定ファイルを差し替えているとOS更新時にエラーが発生することがある

 App Serviceはマネージドサービスなので、OSやWebサーバなどのソフトウェアが自動的に更新される。その際、関連する実行ファイルやスクリプトのパスが変更されることがある。

 例えば、更新によってプログラムのバージョンアップが生じると、ディレクトリ名にバージョン番号が含まれるようなパスは変わってしまうことになる。すると、設定ファイルを差し替えていた場合、更新後も対象のパスは古いディレクトリを指したままなので、結果としてプログラムやスクリプトなどが実行できない、という深刻なエラーが発生することがある(筆者はこのパターンでProductionスロットのWebサービスを止めてしまったことがある)。

 設定ファイルを差し替えることには、こうした危険性が潜んでいることを認識しておいた方がよい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

Windows Server Insider 記事ランキング

本日月間

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。