NginxでBasic認証を設定

Webシステムに簡易的なユーザー認証を設定する方法として、Basic認証はアプリケーション本体と切り離して簡単に導入できるためとても便利です。特に開発中のシステムをデモ目的等で一時的に公開したい場合や、少人数で利用する小さなシステムに認証を設定したい場合に有効だと思います。

.htpasswdファイルの作成

.htpasswdファイルはユーザー名とパスワードの組み合わせを保存するファイルになります。ファイル名は慣習的に.htpasswdという名前にすることが多いですが、必ずしもそうする必要性はありません。

.htpasswdファイルを作成するには、Linux上ではhtpasswdコマンドを利用するのが便利です。Ubuntuにおいてhtpasswdコマンドが利用できない場合は、apache2-utilsライブラリをインストールするのが良いと思います。

$ sudo apt install apache2-utils

htpasswdコマンドが利用できるようになったら、次のコマンドで.htpasswdファイルを作成します。

$ sudo htpasswd -c /etc/nginx/.htpasswd <username>

cオプションでファイルの出力先を指定します。Nginxの実行ユーザーがアクセスできればどこでも大丈夫ですが、Nginxの設定フォルダかアプリケーションの設置フォルダに配置するのが良いと思います。Webからアクセスできないように注意しましょう。

<username>の部分には、作成したいユーザー名を指定します。

上記のコマンドを入力すると、次のようなプロンプトが表示されますので、設定したいパスワードを入力してエンターを押してください。以上で.htpasswdファイルの完成です。

New password:
Re-type new password:

Nginxの設定

.htpasswdファイルができたら、Nginxの設定ファイルにそのファイルを指定します。Basic認証を指定したいパスのlocationディレクティブに次の設定を追加します。

server {
    ...
    location / {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

auth_basicには認証ダイアログに表示させたい文字列を指定します。(ただ、最新のブラウザでは、ここに設定しても表示されないようになってしまったように思われます。)auth_basic_user_fileには先ほど作成した.htpasswdファイルのパスを指定します。

最後にNginxの設定をリロードすれば設定が適用されます。

$ sudo systemctl reload nginx

SSLで利用するよう注意

Basic認証のダイアログで入力されたユーザー名とパスワードは、コロン「:」で連結された後、Base64でエンコードされてサーバーに送られます。デコードすれば簡単にパスワードが見られてしまうため、非SSL(https://ではない)のWebサーバーでは、特別に通信が秘匿される手段が用意されている場合を除いて、利用しないようにしましょう。

UbuntuへのPHPのインストールとバージョンの切り替え

PHPのインストール

まず、PHP用のaptのPPA(Personal Package Archive)リポジトリを追加します。

$ sudo apt install -y software-properties-common
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update

次に、追加したPPAリポジトリを利用して、必要なバージョンのPHPをインストールします。ここではPHP 7.3をインストールしています。

$ sudo apt install -y php7.3

PHPのバージョンを切り替える

開発しているアプリケーションに応じて、使用するPHPのバージョンを変えたい場合があると思います。その際には、update-alternativesコマンドを利用すると、簡単にバージョンを切り替えることができます。

例えば、php7.2に切り替えたい場合は、次のように行います。まず、aptコマンドでphp7.2をインストールします。

$ sudo apt install -y php7.2

その上で、update-alternativesコマンドを次のように実行します。既にインストールされているバージョンの一覧が表示されますので、インストールしたいバージョンのSelectionの列の数字を入力し、Enterを押します。

$ sudo update-alternatives --config php
There are 2 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php7.3   73        auto mode
  1            /usr/bin/php7.2   72        manual mode
* 2            /usr/bin/php7.3   73        manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/php7.2 to provide /usr/bin/php (php) in manual mode

以上で、バージョンの切り替えが完了します。

Top