Apache で CGI を動かす設定

はじめに

Debian 12 クリーン・インストール後の続き(まだやっているのかよ)。

長い間ローカルで chalow を使っていて、ブログに残すまでもない個人的なメモなどで活用している。 chalow は ChangeLog 形式をhtmlに変換してくれるもので、簡単な検索もできるcgiもある。(Debian パッケージもあるのだ。)

今見るとchalowは2007年にversion 1.0で、それから更新していない。 version 1.0になるまでが時間を要していたと記憶があるが、ほとんど完成してしまったプログラムということかも知れない。 Perlで書かれているのが時代を感じるところではある。

まあイマドキであればorg-modeなどで書くのが普通なのだろう。 Chongelogはフォーマットが日付と箇条書きのみという制限が良い方向に機能していると思う。 ちょっとしたメモを書く敷居をとても低く感じる。

普段はEmacs上でずっと書いているのだが、内容を参照するだけならブラウザから参照するほうが何かと便利だ。

しかし、動かない…。そうuserdirが有効になっていなかった。それだけではない。

userdirを有効化

まず userdirを有効にする

sudo a2enmod userdir
肝心なのが、userdir.conf の編集。 具体的な変更は下の赤字の”Options”を追記する。
serDir public_html
UserDir disabled root

<Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit Indexes Options
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        Require method GET POST OPTIONS
</Directory>

この編集を忘れると

.htaccess: Options not allowed here

というエラーを吐く。

cgi モジュールを有効化する

cgiを動かせるようにモジュールを有効化する。

sudo a2enmod cgid 

apacheサービスを再起動

sudo systemctl restart apache2 

.htaccessの設置

cgiを設置したディレクトリに.htaccessを設置する
touch .htaccess
chmod 604 .htaccess

.htaccessは以下のようにする:

Options +ExecCGI
AddType text/html cgi
AddHandler cgi-script cgi

おわりに

.htaccess ではなくて、グローバルで設定する方法もあるようだが(Directoryで ディレクトリを直に指定し Optoinsを設定する)、そんな個別ユーザーの設定をグローバルに書くのはやりたくない。

というわけで、たぶんこれが一番汎用性が高い設定なのではないかと思う。