注意: この記事はLLMによって英語から翻訳されたものです。正確性については保証いたしかねますので、あらかじめご了承ください。英語の原文はこちら。
Network Watcherの開発にあたり、https://ifconfig.me/ipのようなものを、新しいソフトウェアのインストールや設定なしにセルフホストしたいと考えた。
Apacheサーバーをプロキシサーバーとして稼働させていたので、利用可能なオプションを調べることにした。
RHELシステムではhttpdにmod_includeがコンパイル済みであることがわかった(ただし、デフォルトでは有効ではなく、動作させるには明示的な設定が必要)。
そのため、.shtmlスクリプトはたった1行で済んだ:
<!--#echo var="REMOTE_ADDR" -->これだけでは動作しないため、Apacheのvhostファイルにいくつかの設定が必要だった:
DocumentRoot /path/to/dir
<Directory /path/to/dir>
# SSIのexec機能を使用できないようにし、現在の設定を
# 上書きできないようにする
Options IncludesNOEXEC
AllowOverride None
# Apacheに.shtmlファイルをMIMEタイプtext/htmlとして配信するよう指示し、
# ページがダウンロードされずに表示されるようにする
AddType text/html .shtml
# Apacheに.shtmlファイルをSSIプロセッサで解析するよう指示する
AddOutputFilter INCLUDES .shtml
DirectoryIndex index.shtml
Require all granted
</Directory>
RewriteEngine On
# 無効なトークンを拒否
RewriteCond %{HTTP:Authorization} !^Bearer\ dummy-password$
RewriteRule .* - [F]
# / 以外のリクエストを拒否
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !^/index\.shtml$
RewriteRule .* - [F]RewriteCond %{HTTP:Authorization}の行にハードコードされたパスワードがあることに気づくかもしれない。複雑なことをせずにシンプルなBearer認証を実装したかった(また、それが可能かどうかも気になっていた)。ハードコードされたパスワードは少し見栄えが悪いが(ApacheのIncludeディレクティブを使って別ファイルに移すこともできる)、たとえ誰かがページにアクセスできたとしてもリスクはほぼないので、これで十分だと考えている。
追加リソース
メールで返信