hugoを使ってhtmlファイルの静的生成はしたいが,アクセスは制限して,ログインユーザだけに読ませるようにしたい.
アクセスコントロール部分は,bottle を使って小さなプログラムを書き,username/password をチェックするようにした.
bottle 自体はセッション機能を持っていないが,bottle-beaker プラグインを使うことで,beaker のセッション機能を利用することができる.
Web サーバは,apacheを使うことにした.mod_wsgi を入れる.希望としては,特定の https://host/app1/… の時だけアプリケーションに制御が渡って,そうでない https://host/dir1/dir2/file.html のときには,普通にファイルを見てほしかったのだが,問題があった.そうするためには,
WSGIScriptAlias / /var/www/...
とするわけにはいかない.これだと,全部 WSGI がひったくってしまう.
WSGIScriptAlias /app1 /var/www/....
といった具合に書かなければならないと思うのだが,この時,bottle の @route(…) でチェックする path に,/app1 が取り除かれたものが渡ってくる (ように思える.あまりちゃんとは見ていない).一方,bottle スクリプトを普通に走らせた場合 (開発時) には,当然ながら /app1/… の形で渡ってくる.この両方に対応するように書くのは面倒くさい.書けなくはないだろうと思うが,少なくともちょっとやっただけではうまくいかないところがあった.
で,やむを得ず,非標準のポートを使って,それ用の VirtualHost を使うことにした.URLがみっともないが.だったらはじめからWSGI専用Webサーバを使った方が楽だったかもしれない.
さて,WSGIアプリは,認証のためだけに使うのだが,認証が通ったらあとはファイルの中身を返すだけ,かと思っていたら,けっこういろいろやらなくてはいけないことがあった.
まず,ディレクトリ名でアクセスが来たら,そこの index.html を返さなくてはいけない.(当面 .html しかないのでそれ以上のことは考えない) これも,https://…/dir/ というアクセスが来たら,そのまま index.html の中身を返せば良いが,https://…./dir の場合にはそれではうまくいかない.html の中に a タグがあって,href が相対パスで書いてある場合,ディレクトリが違ってしまうからである.そこで,この場合には https://…/dir/ へリダイレクトする.(無駄だ…)
雑感: これで小グループ用のウェブサイトを作ったとして,この技術が何年持つか?