猫からのお叱り:画像と配信設定
ChatGPT生成
成果物
- cat-notice.png:大きな原寸ポスター。

- cat-notice.png.gz:PNGのgzip版。保管・ダウンロード用で、下記設定では配信しません。
- info-cat.conf:対象VirtualHost内に追加する設定例。
# Place inside the intended VirtualHost, before broad AliasMatch rules. # Requires mod_alias and mod_authz_core. Headers are optional. AliasMatch "^/info$" "/usr/local/www/info-cat/cat-notice.webp" <Directory "/usr/local/www/info-cat"> AllowOverride None Options -Indexes -ExecCGI -Includes Require all granted <Files "cat-notice.webp"> SetHandler default-handler ForceType image/webp AcceptPathInfo Off </Files> </Directory> <LocationMatch "^/info$"> SetHandler default-handler ForceType image/webp <LimitExcept GET HEAD> Require all denied </LimitExcept> <IfModule mod_headers.c> Header set X-Content-Type-Options "nosniff" Header set Cache-Control "public, max-age=3600" </IfModule> </LocationMatch>
FreeBSD / Apache 2.4 への設置
実サーバーの設定・モジュール・PHPハンドラは未確認です。この設定は実機検証済みではありません。設定のバックアップ後、対象ホストで構文確認と応答確認を行ってください。
root権限で専用ディレクトリを作り、配信用WebPだけを置きます。転送済みファイルの場所に応じてコピー元を変更してください。
install -d -o root -g wheel -m 755 /usr/local/www/info-cat install -o root -g wheel -m 644 cat-notice.webp /usr/local/www/info-cat/cat-notice.webp /usr/local/sbin/apachectl -M
alias_module と authz_core_module が必要です。headers_module があればキャッシュとnosniffヘッダーも付与します。info-cat.conf の内容を /usr/local/etc/apache24/httpd.conf 内、または既存のIncludeから読み込まれる設定ファイルの、対象VirtualHostの内側に追加します。広い範囲を扱うAliasMatchより前に置いてください。
既存のRewriteRule、Redirect、ProxyPass、Location、PHP設定との競合はこの断片だけでは判断できません。特に既存の全URL向けプロキシやリライトがある場合は、その設定側でも /info を除外する調整が必要です。既存のアクセス制限があるホストでは Require all granted の影響も確認してください。
/usr/local/sbin/apachectl configtest # Syntax OKを確認してから service apache24 graceful curl -I https://YOUR-HOST/info curl -fsS https://YOUR-HOST/info -o /tmp/info-check.webp cmp /usr/local/www/info-cat/cat-notice.webp /tmp/info-check.webp curl -I https://YOUR-HOST/info/ curl -I https://YOUR-HOST/information curl -I https://YOUR-HOST/info/test curl -I 'https://YOUR-HOST/info?test=1' curl -X POST -I https://YOUR-HOST/info
YOUR-HOSTを実際のホスト名に置き換えます。GET /info は通常200と image/webp、HEADは本文なし、POSTは403を想定します。末尾スラッシュ・子パス・information はこのAliasMatchに一致せず、既存サイト側の処理になります。クエリ文字列はパスではないため /info?test=1 も画像になります。ここでいう完全一致はApacheが処理するURLパスに対する一致であり、生のリクエスト表記を限定するものではありません。
圧縮と転送量の注意
WebPはすでに画像圧縮されています。gzipを重ねても小さくなるとは限りません。配信用WebPは Content-Type: image/webp で返し、Content-Encoding: gzip は付けません。PNG.gzをHTTP圧縮として配信するなら、Accept-Encodingによる選択、非対応クライアントへの未圧縮版、Content-Type: image/png、Content-Encoding: gzip、Vary: Accept-Encoding、二重圧縮の防止が別途必要です。本例はその複雑さを避けてWebPを固定配信します。
大きい画像を返すほど、主に自分側の転送量と接続占有が増えます。たとえば1応答300 kBを10万回送れば、本文だけで約30 GB(十進)です。キャッシュを無視する巡回にもこの費用は発生します。HTTPクライアントが画像をデコードする保証もなく、相手の計算資源を消費させられるとは限りません。
この画像の返却はアクセス抑止策ではありません。負荷を下げたい場合は小さな403/404応答や入口側の制限の方が適する可能性があります。実在する /info の機能を置き換えてよいかも確認してください。画像に異常な展開サイズ、再帰圧縮、遅延送信は使用していません。
一次資料
公式資料を2026-10-22に確認。ディレクトリ /usr/local/www/info-cat は本例用に選んだ設置先です。

