Osnovna konfiguracija web poslužitelja Apache HTTP Server - GASERI


Apache HTTP Server, kolokvijalno samo Apache, je HTTP poslužitelj namijenjen za moderne operacijske sustave slične Unixu i Windowse. Cilj projekta koji ga razvija je ponuditi siguran, efikasan i proširiv poslužitelj koji poštuje aktualne st...



Onion Details



Page Clicks: 0

First Seen: 03/15/2024

Last Indexed: 10/23/2024

Domain Index Total: 397



Onion Content



Preskoči na sadržaj Osnovna konfiguracija web poslužitelja Apache HTTP Server Hint Uputa za Apache HTTP Server na internetu ima na pretek . Za temeljit uvod povrh ovih vježbi preporučam službenu dokumentaciju posljednje dvije verzije Red Hat Enterprise Linuxa , i to: za verziju 8: Chapter 1. Setting up the Apache HTTP web server u Deploying different types of servers ili za verziju 7: Chapter 14. Web Servers u Red Hat Enterprise Linux 7 System Administrator's Guide . Obje verzije Red Hat Enterprise Linuxa imaju Apache 2.4 koji i koristimo u nastavku. Apache HTTP Server , kolokvijalno samo Apache, je HTTP poslužitelj namijenjen za moderne operacijske sustave slične Unixu i Windowse. Cilj projekta koji ga razvija je ponuditi siguran, efikasan i proširiv poslužitelj koji poštuje aktualne standarde HTTP-a: RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0 RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1 RFC 7230: Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content RFC 7232: Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests RFC 7233: Hypertext Transfer Protocol (HTTP/1.1): Range Requests RFC 7234: Hypertext Transfer Protocol (HTTP/1.1): Caching RFC 7235: Hypertext Transfer Protocol (HTTP/1.1): Authentication RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) Razvoj projekta podržava zaklada Apache Software Foundation , najveća zaklada za razvoj slobodnog softvera otvorenog koda na svijetu. Projekt započinje 1995. godine i inicijalno je zasnovan na izvornom kodu poslužitelju NCSA HTTPd , ali vrlo brzo taj poslužitelj zastaje s razvojem i korisnici prelaze na Apache. Ime httpd (HTTP daemon) se održalo i do današnjih dana kao ime naredbe kojom se poslužitelj pokreće. Od travnja 1996. je najpopularniji web poslužitelj na internetu , a u odgovoru na pitanje je li to još uvijek ili ga je prestigao nginx ne slažu se statistike od W3Techs koji tvrdi da je još uvijek najpopularniji Apache i Netcrafta koji tvrdi da je najpopularniji nginx ; treći po popularnosti je Microsoft Internet Information Services . Tip Značenje pojma web poslužitelj je dvojako: može se raditi o softveru kao što je Apache HTTP Server ili nginx, a može u pitanju biti i hardver koji taj softver izvodi. Za ilustraciju kako u praksi takav hardver uglavnom izgleda, možete pogledati recenziju Dell EMC PowerEdge R640 na ServeTheHome , a za ilustraciju kako izgleda podatkovni centar prosječnog popularnog web sjedišta koji koristi više web poslužitelja fotografiju iz podatkovnog centra Wikimedia Foundationa . Aktualna stabilna verzija Apache HTTP Servera je 2.4, a prethodna verzija 2.2 više nije podržana od kraja 2017. godine. Verzija 2.4 je prvi put postala dostupna u veljači 2012. godine i od tada redovno dobiva nove značajke u novim izdanjima . Primjerice, od verzije 2.4.17 postoji podrška za protokol HTTP/2 ( modul mod_http2 ), a od verzije 2.4.30 podrška za automatsko potpisivanje SSL/TLS certifikata korištenjem protokola ACME ( modul mod_md ). Apache ima vrlo detaljnu službenu dokumentaciju . Slika httpd na Docker Hubu Apache možemo instalirati kao i svaki drugi program i pokretati kao i svaki drugi daemon. Ipak, kako ćemo u nastavku eksperimentirati s različitim postavkama i kopirati datoteke u sustavske direktorije gdje ih Apache čita, iskoristit ćemo Docker za pokretanje da se ne igramo s vlastitim operacijskim sustavom. Docker omogućuje pokretanje tzv. kontejnera , standardiziranih jedinica softvera većih od softverskih paketa i manjih od virtualnih mašina. Svaki Dockerov kontejner uz aplikaciju sadrži i sve biblioteke potrebne za pokretanje te aplikacije. Docker Hub je pretraživa kolekcija Dockerovih kontejnera. Apache se na Docker Hubu naziva httpd , a zbog svoje popularnosti spada među službene slike za koje se garantira redovitost sigurnosnih nadogradnji . Pokretanje kontejnera httpd izvodimo naredbom docker run : $ docker run httpd:2.4 Unable to find image 'httpd:2.4' locally 2 .4: Pulling from library/httpd 54fec2fa59d0: Pull complete 8219e18ac429: Pull complete 3ae1b816f5e1: Pull complete a5aa59ad8b5e: Pull complete 4f6febfae8db: Pull complete Digest: sha256:c9e4386ebcdf0583204e7a54d7a827577b5ff98b932c498e9ee603f7050db1c1 Status: Downloaded newer image for httpd:2.4 Vidimo da je Docker javio da lokalno nemamo sliku kontejnera i zatim povukao nekoliko slojeva (kontejneri su višeslojni kako bi se lakše višestruko iskorištavalo pojedine dijelove kontejnera). Ako želimo samo povlačenje slike na temelju koje se može stvarati kontejnere, izvest ćemo ga naredbom docker pull . Pokretanje Apacheja vidimo u porukama: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Thu May 07 23:25:00.371329 2020] [mpm_event:notice] [pid 1:tid 139777378702464] AH00489: Apache/2.4.43 (Unix) configured -- resuming normal operations [Thu May 07 23:25:00.371673 2020] [core:notice] [pid 1:tid 139777378702464] AH00094: Command line: 'httpd -D FOREGROUND' Prekid izvođenja, kao i u većini drugih softvera na operacijskim sustavima sličnim Unixu, vršimo kombinacijom tipki Control + C ( ^C ). Vidjet ćemo poruku: [Thu May 07 23:33:30.363896 2020] [mpm_event:notice] [pid 1:tid 139777378702464] AH00491: caught SIGTERM, shutting down Ponovimo pokretanje koje smo izveli iznad naredbom docker run i uočimo da se slika kontejnera ne mora ponovno preuzeti. Nakon pokretanja uočimo da posljednji redak kaže da je Apache pokrenut, a u retcima prije nam javlja i na kojoj adresi. Ostavimo sada kontejner pokrenutim i napravimo u drugom terminalu cURL-om HTTP zahtjeve GET i HEAD na tu adresu kako bismo se uvjerili da poslužitelj radi i da je zaista u pitanju Apache 2.4: $ curl http://172.17.0.2/ It works! $ curl -I http://172.17.0.2/ HTTP/1.1 200 OK Date: Fri, 08 May 2020 15 :18:10 GMT Server: Apache/2.4.43 ( Unix ) Last-Modified: Mon, 11 Jun 2007 18 :53:14 GMT ETag: "2d-432a5e4a73a80" Accept-Ranges: bytes Content-Length: 45 Content-Type: text/html Umjesto stranice It works! stavit ćemo kasnije vlastiti sadržaj u kontejner. Uočimo da na strani poslužitelja Apache ispisuje zahtjeve u obliku: 172.17.0.1 - - [08/May/2020:15:18:10 +0000] "GET / HTTP/1.1" 200 45 U ovom zapisu oblika Common Log Format polja su redom, odvojena razmakom: ime ili adresa domaćina, ime kojim se korisnik prijavio (ako postoji), ime korisnika na udaljenom računalu, vrijeme, prva linija HTTP zahtjeva, HTTP kod statusa i veličina odgovora. Više informacija moguće je pronaći u dokumentaciji modula mod_log_config . Konfiguracija poslužitelja Apache Poslužitelj sad možemo zaustaviti jer želimo prije ponovnog pokretanja učiniti što od nas traži upozorenje AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message . Dohvatimo Apachejevu konfiguracijsku datoteku iz kontejnera: $ docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf Uočimo da ovdje imamo novi parametar --rm koji Dockeru kaže da izbriše stvoreni kontejner nakon što završi izvođenje. Također, uočimo da uz ime kontejnera navodimo i naredbu koju želimo pokrenuti unutar kontejnera (umjesto zadane naredbe httpd ), a to je ovdje cat /usr/local/apache2/conf/httpd.conf . Izlaz te naredbe spremamo u my-httpd.conf . Proučimo tu datoteku (možemo je ispisati korištenjem naredbe cat ili otvoriti u uređivaču teksta po želji): # # This is the main Apache HTTP server configuration file. It contains the # configuration directives that give the server its instructions. # See for detailed information. # In particular, see # # for a discussion of each configuration directive. # #... # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 80 #... # # ServerAdmin: Your address, where problems with the server should be # e-mailed. This address appears on some server-generated pages, such # as error documents. e.g. admin@your-domain.com # ServerAdmin you@example.com # # ServerName gives the name and port that the server uses to identify itself. # This can often be determined automatically, but we recommend you specify # it explicitly to prevent problems during startup. # # If your host doesn't have a registered DNS name, enter its IP address here. # #ServerName www.example.com:80 #... Iako većinu naredbi nećemo koristiti, vrijedi preletiti popis svih konfiguracijskih naredbi čisto da steknemo dojam koliko je moderan web poslužitelj kompleksan softver. Osnovna konfiguracijska naredba s kojom ćemo početi proučavanje konfiguracijske datoteke je Listen ( dokumentacija ). Ta naredba kaže poslužitelju na kojim adresama i vratima će primati zahtjeve: #Listen 12.34.56.78:80 Listen 80 Ako su navedena samo vrata (kao što su u našem slučaju vrata 80), onda poslužitelj sluša na svim adresama putem kojih ga je moguće doseći. Pod konfiguracijskom naredbom ServerAdmin ( dokumentacija ) navest ćemo vlastitu e-mail adresu umjesto you@example.com . Apache nam neće slati nikakve e-mailove jer nema konfiguriran SMTP poslužitelj koji može koristiti. Konfiguracijsku naredbu ServerName ( dokumentacija ) ćemo odkomentirati i postaviti na domenu koju želimo da poslužitelj poslužuje. Teoretski možemo koristiti bilo koju domenu koja ne postoji na internetu (npr. mreze.rijeka ili internet.mars ), ali to je loša praksa jer redovito dolaze nove vršne domene i moguće je da nekom padne na pamet registrirati vršne domene .rijeka i .mars pa nastane problem kolizije naše lokalne razvojne okoline i interneta kao što je već bio slučaj s domenom .dev . Zbog toga ćemo ovdje koristiti poddomene na .rm.miletic.net nad kojima imamo kontrolu, npr. apache-primjer.rm.miletic.net : ServerName apache-primjer.rm.miletic.net:80 Vrata 80 ne moramo navoditi, ali se to smatra dobrom praksom. Izrada slika Izgradimo sada Docker kontejner koji sadrži našu konfiguracijsku datoteku umjesto zadane. Uređivačem teksta po želji stvorimo datoteku imena Dockerfile i sadržaja: FROM httpd:2.4 COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf Ova datoteka kaže da će novi Docker kontejneri nastajati iz slike httpd:2.4 u koju je dodatno kopirana datoteka ./my-httpd.conf na mjesto /usr/local/apache2/conf/httpd.conf . Izgradimo novu sliku naredbom docker build na način: $ docker build -t "my-httpd:2.4-1" . Sending build context to Docker daemon 27 .14kB Step 1 /2 : FROM httpd:2.4 ---> b2c2ab6dcf2e Step 2 /2 : COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf ---> 38dbb60affd2 S...