Lighttpd (3. deo) – Naprednije konfigurisanje Lighttpd servera (programiranje plugina)

Autor: Vladimir Cicović

U ovom dijelu ćemo napraviti naš prvi plugin za lighttpd server. Programiranje plugin-a traži dosta više posvećenosti nego što ćemo ponuditi u ovom članku, ali čitaocima dajemo mogućnost da krenu od ovog članka kao osnove. Od čitaoca se očekuje da poznaje jezik C, kompajliranje na Linux-u i osnove konfigurisanja Lighttpd-a. Pretpostavićemo da čitaoci imaju Debian ili Ubuntu (sistem pod virtual box-om je idealno rešenje). Komande prije nego krenemo sa programiranjem plugin-a su sljedeće:

apt-get install libtool automake pkg-config libbz2-dev libpcre3-dev zlib1g-dev make -y

Poslije instalacije biblioteka preuzećemo sources lighttpd-a:

wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.32.tar.gz

Pa raspakujemo sources:

tar -xf  lighttpd-1.4.32.tar.gz

Rutinska provjera da li je sources moguće iskompajlirati:

cd lighttpd-1.4.32 ; ./configure ; make

Ako poslije ovog konfigurisanja i kompajliranja ne bude problema, znači da imamo sources koji možemo da postavimo na naš operativni sistem.

Sljedeći korak biće kopiranje skeleton-a koji će poslužiti kao baza za naš plugin. Pretpostavka je da se nalazimo u fascikli lighttpd-1.4.32.

cd src ; cp mod_skeleton.c mod_hello.c

Zamjenićemo „mod_skeleton” unutar datoteke „mod_hello.c” sa:

sed -i 's/mod_skeleton/mod_hello/g' mod_hello.c

Sada ćemo otvoriti našim omiljenim editorom (pico, vi…):

pico mod_hello.c

Idemo do funkcije:

URIHANDLER_FUNC(mod_hello_uri_handler) { ... }

Unutar ove funkcije postoje linije kôda koje brišemo tako da ostane samo:

URIHANDLER_FUNC(mod_hello_uri_handler) { }

Sada između zagrada dodamo:

 plugin_data *p = p_d; char *hello ="hello"; buffer *l; UNUSED(srv); if (con->mode != DIRECT) return HANDLER_GO_ON; if (con->uri.path->used == 0) return HANDLER_GO_ON; mod_hello_patch_connection(srv, con, p); if ( strstr(con->uri.path->ptr,hello) == 0) return HANDLER_GO_ON; //Ako hello nije u putanji predaj izvršavanje drugom modulu //Sređujemo Header za naš odgovor response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type")CONST_STR_LEN("text/plain")); //uzimamo buffer kao pokazivač kako bismo izvršili dodavanje našeg string-a l = chunkqueue_get_append_buffer(con->write_queue); //ovde dodajemo sa API-jem naš pokazivač na string hello buffer_append_string_len(l, CONST_STR_LEN(hello)); //Obaviještavamo server da je prenos svih datoteka završen con->file_finished = 1; //Naš modul šalje da je završena obrada i da može poslati klijentu return HANDLER_FINISHED; 

U datoteci lighttpd-1.4.32/src/Makefile.am dodamo sljedeće linije (negdje gdje je prikladno):

 lib_LTLIBRARIES += mod_hello.la mod_hello_la_SOURCES = mod_hello.c mod_hello_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined mod_hello_la_LIBADD = $(common_libadd)

Sada pokrenemo niz komandi kako bismo iskompajlirali lighttpd sources (u fascikli /lighttpd-1.4.32):

 make clean ./autogen.sh ./configure make make install

U konfiguracijskoj datoteci za lighttpd:

server.modules = ( "mod_access", "mod_alias", "mod_compress", "mod_redirect", #Naš modul hello "mod_hello", ) server.document-root        = "/var/www" server.upload-dirs          = ( "/var/cache/lighttpd/uploads" ) server.errorlog             = "/var/log/lighttpd/error.log" server.pid-file             = "/var/run/lighttpd.pid" server.username             = "www-data" server.groupname            = "www-data" server.port                 = 80 index-file.names            = ( "index.php", "index.html", "index.lighttpd.html" ) compress.cache-dir          = "/var/cache/lighttpd/compress/" compress.filetype           = ( "application/javascript", "text/css", "text/html", "text/plain" ) include_shell "/usr/share/lighttpd/create-mime.assign.pl" include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

Da bismo testirali naš modul, iskompajliranu datoteku /lighttpd-1.4.32/src/lighttpd pokrećemo sa:

lighttpd -f lighttpd.conf

Testiramo sa:

curl http://127.0.0.1/hello

Gdje je vraćeni rezultat:

hello 

Sa ovim člankom smo završili seriju o Lighttpd-u. Preporučujemo čitaocima da pregledaju module koji već postoje, kako bi možda napravili jedan koji bi mogao da se doda u lighttpd.

Prethodni deo

Ostavite odgovor

Vaša adresa e-pošte neće biti objavljena. Neophodna polja su označena *

Time limit is exhausted. Please reload CAPTCHA.