Ubuntu 16.04 / Debian 8: apache2でpublic_htmlにwebサーバを立ち上げる

ユーザ毎のwebサーバを立ち上げるuserdirモジュールの使い方を記載します。

 

1 apache2のインストール

aptでapache2をインストールします。

$ sudo apt-get install -y apache2

2 userdirモジュールの有効化

userdirモジュールを有効にします。

$ sudo a2enmod userdir
$ sudo systemctl restart apache2

3 public_htmlの作成

$ mkdir ~/public_html

このまま以下のURLにアクセスすると以下の様な画面が表示されます。

ファイルをダウンロードさせるだけならばこのままpublic_htmlにファイルを置くだけでも良いでしょう。

http://<server>/~<username>

0001_FileList.png

URLにアクセスするとDirectoryIndexにindex.htmlやindex.cgiがデフォルトで呼ばれます。

index.htmlを作成して簡易なページを表示させることもできます。

0002_IndexHTML.png

4 Digest認証の導入

ページアクセスにDigest認証を使用するようにします。

auth_digestモジュールを有効にします。

$ sudo a2enmod auth_digest
$ sudo systemctl restart apache2

以下の様なpublic_html/.htaccessを作成します。"hiroom2"はレルムと呼ばれるものです。

AuthType Digest
AuthName "hiroom2"
AuthUserFile /home/hiroom2/.htdigest
require valid-user

レルム"hiroom"へアクセスするユーザhiroom2を追加します。

$ htdigest -c ~/.htdigest "hiroom2" hiroom2
Adding password for hiroom2 in realm hiroom2.
New password:
Re-type new password:

ページにアクセスするとユーザ名とパスワードを求められます。

0003_Password.png

5 CGIの導入

userdirはデフォルトでExecCGIを許可していません。

CGI導入するならDocker等でコンテナを作成した方が良いのかもしれません。

 

userdir.confのOptionsにExecCGIを追加します。

$ diff -uprN /etc/apache2/mods-available/userdir.conf{.org,}
--- /etc/apache2/mods-available/userdir.conf.org        2016-05-11 07:22:10.861339651 +0900
+++ /etc/apache2/mods-available/userdir.conf    2016-05-11 08:45:45.955093386 +0900
@@ -4,7 +4,7 @@

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
-               Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
+               Options ExecCGI MultiViews Indexes
                SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Require all granted
                </Limit>

cgiモジュールを有効にします。

$ sudo a2enmod cgi
$ sudo systemctl restart apache2

以下の様なpublic_html/.htaccessを作成します。

AddHandler cgi-script .cgi

以下のindex.cgiを追加します(chmod a+xで実行権限を与えて下さい)。

#!/bin/sh

echo "Content-type: text/html"
echo ""
echo "hello"

URLにアクセスするとindex.cgiによるHTMLが出力されました。

0004_IndexCGI.png