【ふぇ】素っ気ないautoindexを色っぽくしたい@nginx
2025年4月7日プライベートautoindex,http,list,nginx,web,ファイル一覧
Webサーバ上で、ちょいとファイル公開したい際に役に立つ、autoindexですが・・。
う・・ん、どうも素っ気ない。
(;´Д`)
もうちょいなんとかならないか。
fancyindexというモジュール
nginxのモジュールとして動作する、fancyindex(github)というものがあるらしい、aptでサクッとインストールできるようなので、試してみる。見た目のカスタムも出来るそうだ。
sudo apt install nginx-extras (他にも色々入る)
sudo apt install libnginx-mod-http-fancyindex (単体なら)
・・が、しかし、パッケージの破損とかいうエラーが出て、どないしてもインストール出来ない。
(´;ω;`)
海外のサイトとか見ると、どうやら、パッケージのメンテナンスが怪しいそうで、依存関係で問題が良く起きてるそうだ。
h5aiとかいうPHPプログラム
色々調べてみると、h5aiという記事が沢山ヒットします。
こちらは、PHP&JSで作られた小さなプロジェクトで、FastCGI/PHPがあれば、容易に動作するようです。
事前に、FastCGIやPHP環境を構築しておきます。Wordpressとかが稼働してるなら、そのままイケる。
まずは試すだけなので、簡単にnginx confの方は以下のようにしました。
location ~* /(公開ディレクトリ) {
root (内部パス);
index _h5ai/public/index.php
charset utf-8;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
公開したいディレクトリに、解凍します(_h5aiディレクトリ)
そのディレクトリが見えるようにしたら、「_h5ai/public/index.php」(管理用)にアクセスすると。
パスワード欄は、空で構わないのでloginを押します。
すると、こんな環境のチェックが入ります。
全てグリーン表示になるように、環境の設定を繰り返す必要があります。
わたしの場合は、PHP GDモジュールのみが、NGでした。
sudo vi /etc/php/8.3/fpm/php.ini で、extension=gd をコメントアウトにて対応。
他PCで試してみたら、PDF ThumbでNG判定。
これは、imagemagickのconvertが使えれば良いようなので、imagemagick(約8MB)を入れたらOKでした。
全てグリーンになりましたら、後は、公開アドレスにアクセスします。
すると、こんな、とってもリッチなautoindex表示が出来るようになります。
Windows/エクスプローラのように、詳細表示やサムネイル表示(大きさ変更可)、ディレクトリのツリー表示と、基本的な機能は十分備えています。サイズ表記も、人間が分かりやすい形式になっています。
※デフォだと、5秒で自動更新
また、以下のファイルから、設定を行う事ができます(先の管理用パスワードもここ)
_h5ai/private/conf/options.json
設定とか
まだ、全体を見回した訳ではありませんが、これを設定して見ました。
download、typeを”shell-zip” で、まとめてダウンロードを、ZIP形式に。
search、enabledを”true” で、検索機能が有効に。
view、unmanagedに”hide” を追加で、見せたくないディレクトリに”hide”という名のファイルを置けば良い。
デフォで、index.phpが入ってるディレクトリは中が空になります(ディレクトリ自体は見える)
こちらでテストした感じでは、ファイル所有者を変えて、そもそもnginxからアクセス出来ないような状態にする事で、完全に見えなくする事もできます(そりゃそうだが)
追記:普通に隠し設定ありました
view、hidden で、隠しファイル/フォルダーの設定が出来ました。正規表現で書けます。
デフォ:"hidden": [“^\\.", “^_h5ai"],
アリそうだなぁと、PHPコード見てたら、ここで見つけた。is_hidden()でオプション見てます。
if (is_dir($path)) {
foreach (scandir($path) as $name) {
if (
$this->is_hidden($name)
|| $this->is_hidden($this->to_href($path) . $name)
|| (!is_readable($path . '/’ . $name) && $this->query_option('view.hideIf403’, false))
) {
continue;
}
ディレクトリツリーも表示される。
サーバ内Samba共有ディレクトリとか、HTTPでも一般公開したいとかに使えるんじゃないでしょうか。
auth_basic “fuck me!!";
auth_basic_user_file /etc/nginx/.htpasswd;
当たり前ですが、そのままBASIC認証を掛ける事も出来ます。
削除やアップロードは出来ない、閲覧(ダウンロード)のみ、あくまでautoindexをリッチにしたというシロモノです。
標準でも、スマホ対応したUIのようになってます(手持ちのAndroid)
高度な機能が欲しければ、HTTP/WebDAVとかなんでしょうか。
カスタマイズとか
ネットを探すと、少しだけですが、テーマを配布してる所があるようですが、ほぼ皆無。
_h5ai/public/css/styles.css にガツッと圧縮されたCSSがあります。
_h5ai/public/css/images に、SVGで作られたアイコン。
_h5ai/private/php 以下に、PHPコードがまとまってます。
業務用途とかだと、excelとかのファイルも扱うかと思いますが、残念ながら専用アイコンは用意されてません。
全体の色味変えるなら、#content辺りをイジれば、でしょうか。
サブディレクトリが表示されない@解決
追記:
http root外のディレクトリを指してる場合、サブディレクトリ以下が空表示になってしまうんだそうです。
https://clover.fcg.world/2015/04/10/129/
まさに私の場合がそうでした(sambaのホルダーを指してた)、どうやってもサブ以下が空なんですよ。
この記事から、だいぶ経過してますが、まだ改善してないって事なんでしょうかね。
(;´Д`)
色々弄りまくってたら、サブディレクトリ分も動作するようになりました。
nginx / location / indexのパス指定が肝のようです。
index (この部分)/_h5ai/public/index.php
追記:
WebRoot外とか関係無く、しっかり設定すれば大丈夫でした。パスですパス。
WWWホルダーの一部に、内側からSambaでアクセス出来るエリアを用意して、(最悪流出しても構わない程度の)ファイルを置いて、外から自由にアクセスできるようになりました。
多分、便利になる・・かな。
あと、こういった更新多いファイル扱う場合は、キャッシュ周りが悪さをする時が多々あるので、注意です。
関連記事

【Web】DWからEmpressionへテンプレート移行
(追記) めっさ古いウェブサイトを、MicrosoftのExpression W ...

【pc】Steamで集計されたPCスペック@2019/7
以下のサイトで、Steamを利用しているプレーヤーさん達のPCスペックが公開され ...

【Web】オープンで超絶なBlueGriffonというWYSIWYGエディタ
追記:3/20 見た目でウェブ編集が出来るWYSIWYGエディタは、有りそうで、 ...

【動画】HTTP:Not Found 404 errorページどうです?
【ニコニコ動画】例の動画に残念ながら豪勢なコーラス隊を添えてみました

【web】MSX museumを再開設しました
大昔に作ってたウェブサイトのバックアップが見つかったので、このまま捨てるのは勿体 ...
ディスカッション
コメント一覧
まだ、コメントがありません