lighttpdで特定ファイルへのアクセスを禁止して404エラーを出すようにする

nogajun
nogajun

このサイトでも使っているBluditの公式Dockerイメージが更新されないし、もともとCentOSで作ってあってサイズが大きく、コンテナ内でsupervisorを使ってnginxとphp-fpmを動かす、あまりよろしくない仕様だったので自分でBluditのDockerイメージを作りました。こちら(Dockerfile)で公開しています。

このDockerイメージ、サイズが小さくなった上にlighttpdとFastCGIで爆速になってます。

もともとのDebianパッケージがよくできているのもあるのですが、ほとんど何もせずに爆速になってて良いです。なにもしなくてもPagespeed Insightでも100点近く出ます。

外部からライブラリを読み込まなければ…。

いや、外部からCSSフレームワークやWebフォントを読み込こむと、いきなり50点台や40点台になるのはねぇ。あと、Bludit 3.13.1だとwebpに画像アップロードが対応してないので、それで点数をガクっと下げられるのもねぇ。理由は分かるけど減点幅が大きすぎませんか。Googleさん。

グチはさておき、小さくて速くなっていい感じなので使おうかと思っていましたが、次のページに移動できないバグが発覚して改修しています。

そのバグ自体は、rewriteルールの間違いですぐに直りましたが、いい機会なのでlighttpdの設定自体を見直してます。

その見直しで「lighttpdのアクセス禁止はurl.access-denyでできるけど、アクセス禁止にして404エラーに飛ばすにはどうしたらいいのだろう」と思って調べたらlighttpdのバグトラックに書いてあったのでメモです。

$HTTP["url"] =~ "/tmp/.*\.php$" {
  url.access-deny = ( "" )
  server.error-handler-404 = "/tmp/"
}

なるほどね。url.access-denyで禁止にしてその後にserver.error-handler-404にしてあげればOKということか。そのまんまだ。