Skip to main content
  1. Posts/
  2. blog.dsinf.net/

Elegancki globalny h5ai pod nginxem

·330 words·2 mins
blog.dsinf.net nginx php
Daniel Skowroński
Author
Daniel Skowroński

h5ai to lister plików w katalogach dla webserwerów oparty o PHP. Zamiast nudnego <ul><li>... produkowanego przez Apache’a, nginxa i całą resztę możemy dostać dowolnie ułożony spis plików (siatka, lista, szczegóły…) z ikonkami, podglądem w colorboxie, kody QR z linkami oraz m.in. filtr [patrz: demo]. Twórca twierdzi, że żadna specyficzna dla serwera funkcja w tym aliasowane katalogi [w nginxie server { … } jest już takim aliasem] nie działa. Ma rację, ale dziś pokażę jak mu tę rację odebrać 😉

Żeby nie duplikować wpisów konfigurację nginxa dla h5ai robimy sami. Najpierw zakładamy plik o nazwie np. h5ai.conf , który trafia do głównego katalogu z konfigami nginxa (dla ręcznie kompilowanych instancji będzie to zapewne /opt/nginx/conf ); zawartość jak następuje:

location ~ /_h5ai/ {
	root   /var/www/h5ai/; # ścieżka do wypakowanego h5ai
	autoindex on;
}
location ^~ /_h5ai/server/php/index.php {
	include        fastcgi_params;
	fastcgi_param SCRIPT_FILENAME /var/www/h5ai/_h5ai/server/php/index.php; # ścieżka do index.php należącego do h5ai
	fastcgi_pass   127.0.0.1:9000;
}

Uzasadnieniem dla tak brutalnego wskazania index.php są dwa fakty:

  1. ma być na szybko więc nie brudzimy sobie rąk w sprytnych mapowaniach fastcgi dla niepublicznych aliasów
  2. index.php jest tu jedynym żądanym przez użytkownika plikiem

Następnie musimy dodać stosowne wpisy do sekcji server{}, przykładowo dla klasycznego folderu /pub:

include /opt/nginx/conf/_h5ai.conf; # pełna ścieżka do konfiga h5ai.conf
location /pub{
	index index.php index.html /_h5ai/server/php/index.php;
}

Na sam koniec - najważniejsze - modyfikacja kodu PHP.
Zmieniamy w pliku h5ai/_h5ai/server/php/inc/setup.php
z define("ROOT_PATH", normalize_path(dirname(APP_PATH), false));
na define("ROOT_PATH", normalize_path($_SERVER["DOCUMENT_ROOT"], false));
co przy zachowaniu ludzkich wartości zmiennych fastcgi powinno działać w 99% wypadków - DOCUMENT_ROOT przekazany do fastcgi jest właściwym katalogiem, którego zawartość chcemy wylistować.

Na sam koniec, rzecz jasna, restartujemy nginxa i gotowe.

Reasumując: dokonując zmiany jednej wartości w kodzie i tworząc jeden plik konfiguracyjny uzyskaliśmy potężne narzędzie listujące pliki w katalogach na nginxie. Na dodatek nie trzeba teraz mnożyć teraz konfigów - wystarczy jeden include i dodanie indexu dla wybranej ścieżki. Działa i jest zrobione porządnie. A samego h5ai warto postawić na każdym serwerze - sprawia wrażenie profesjonalizmu i jest niezastąpiony przy nagłej potrzebie udostępnienia wielu plików.