LINUXでファイル共有(PHP@nginxのディレクトリ設定autoindex) | エド金融道 (息子が「めしが食える大人になる」編)

LINUXでファイル共有(PHP@nginxのディレクトリ設定autoindex)

大量のPDFファイルをサーバーにおいて、ファイル共有してほしいという依頼が。
LINUX環境上なら、SAMBAとかでやるとか、FTPサーバーでやるとか、あるけど、PHPで、普通に一部のサブディレクトリだけ、その中身をそのまんま公開すればいいじゃんってことで、あれこれ設定。

普通なら、Apacheの設定ファイルを触れば良いけど、nginxをWEBアプリケーションサーバーとしている場合の設定方法。

今回は/downloadというフォルダの中のファイル一覧を公開する前提で設定。
なので、まずは、nginxでWEBサーバーとしてのルートディレクトリの下に/downloadのフォルダを作った上でスタート。

(1)nginxの設定ファイル
/etc/nginx/conf.d/nginx.conf
とかに設定ファイルがあるはず。

(2)設定ファイルのディレクトリ設定
その中でのlocation(ディレクトリ)の設定を書く

//これがHTMLのROOTフォルダの設定
location / {
root /home/www/;
index index.php;
//一応JSONが動くようにするmine.typeの設定も必要
charset_types application/json;
//UTF-8の文字コードを使っているので、ここで設定(日本語が文字化けするとこは、自分の環境にあったコードを指定する。
charset UTF-8;
}

//ここがファイル一覧を見えるように公開するディレクトリの設定
location /archive {
root /home/www/download;
//_h5aiのフォルダにあるindex.phpを指定。ここの説明は後で。
index /archive/_h5ai/server/php/index.php;
//以下をONとする事で、対象のディレクトリにindex.phpとかないとき、フォルダ内のファイル一覧が表示される。
autoindex on;
}

(3)nginxの再起動
nginx -s reload
で再起動すれば、取り急ぎ、ファイルの一覧が/downloadのURLで見れるはず。

(4)一覧の整形
_h5aiという、この一覧表示を整形して綺麗にしてくれるパッケージが公開されている。
https://larsjung.de/h5ai/
日本語の設定説明サイトはここ
http://elendia.hatenablog.com/entry/2015/01/23/064138
ここに書いてあるように
(4-1)公開したいフォルダで
wget http://release.larsjung.de/h5ai/h5ai-0.24.0.zip
unzip h5ai-0.24.0.zip
として、ダウンロード後、解凍。
(4-2)_h5ai/server/php/index/index.phpの
define("PASSHASH", "da39a3ee5e6b4b0d3255bfef95601890afd80709");
↓編集後
define("PASSHASH", "自分で生成したハッシュ値をここへ");

のハッシュ値を編集する。これは設定ページを開くためのパスワードで、デフォルトでは空のハッシュ値になっている。www.sha1.czなどでハッシュ値を生成して置き換える。
(4-3)ってやっても、JAVASCRIPTをONにしろみたいなエラーがでる場合がある。
どうやら、h5aiの中のPHPファイルが、参照しに言っているパスを定義しているAPP_HREFという値がおかしくなっていた。
_h5ai/server/php/inc/class_bootstrap.php

69 $script_name = "/".getenv("SCRIPT_NAME");
というふうに、このscript_nameの変数の内容が、自分の環境にあうように書き換えてやる。
と動いた。