OpenSUSE 13: apache2でpublic_htmlにwebサーバを立ち上げる

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

1 apache2のインストール

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

> sudo zypper -n in apache2
> sudo systemctl enable apache2
> sudo systemctl start apache2

2 mod_userdirの有効化

OpenSUSE 13はデフォルトでmod_userdirが有効です。有効でない場合は以下を実行してください。

$ sudo a2enmod userdir
$ sudo systemctl restart apache2

3 ポートの開放

apache2のファイルを利用してポートを開放します。

> firewall_open_service()
{
  for t in FW_CONFIGURATIONS_EXT FW_CONFIGURATIONS_DMZ FW_CONFIGURATIONS_INT; do
    sudo sed -e "s/^${t}=\"\(.*\)\"/${t}=\"\1 $1\"/g" \
         -i /etc/sysconfig/SuSEfirewall2
  done
  sudo systemctl restart SuSEfirewall2
}
> firewall_open_service apache2

4 public_htmlの作成

OpenSUSE 13ではデフォルトで~/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

5 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

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

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

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

0003_Password.png

6 CGIの導入

userdirはデフォルトでExecCGIを許可していません。CGI導入するならDocker等でコンテナを作成した方が良いのかもしれません。

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

> sudo sed -e 's/\( *\)Options \(.*\)/\1Options ExecCGI \2/g' \
           -i /etc/apache2/mod_userdir.conf

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

$ sudo a2enmod cgi
$ sudo systemctl restart apache2

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

AddHandler cgi-script .cgi
DirectoryIndex index.cgi

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

#!/bin/sh

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

echo "<pre>"
free -m
echo "</pre>"

echo "<pre>"
w
echo "</pre>"

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

0004_IndexCGI.png