Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gsr:laboratoare:laborator-07 [2016/10/06 15:54]
george.milescu
gsr:laboratoare:laborator-07 [2016/12/08 20:39] (current)
alexandru.carp
Line 1: Line 1:
 ====== Laborator 07: Servicii web ====== ====== Laborator 07: Servicii web ======
 +
 +<​note>​Documentatie:​ http://​httpd.apache.org/​docs/​2.2/</​note>​
 +
 +===== Instalare Apache si configurari de baza =====
 +
 +  * Instalati serverul Apache (pachetul **apache2**).
 +
 +  * Apoi, verificati functionarea acestuia folosind un browser web. Va veti conecta pe URL-ul http://​localhost
 +
 +==== Site default ====
 +
 +  * Asa cum ati observat anterior, serverul Apache serveste in mod implicit un fisier HTML. 
 +
 +  * Gasiti fisierul **index.html** servit de server-ul Apache in ierarhia de fisiere.
 +     * Hint: Configuratia site-ului default se afla in ''/​etc/​apache2/​sites-available/​000-default.conf''​
 +     * Hint: Observati directiva ''​DocumentRoot''​
 +
 +  * Modificati fisierul gasit anterior astfel incat sa contina mesajul "GSR web services"​.
 +
 +==== Listening ports ====
 +
 +  * Pe ce port asculta in mod implicit serverul Apache? Investigati folosind ''​netstat''​.
 +
 +  * Modificati portul astfel incat Apache sa asculte pe 8080.
 +     * Hint: ''/​etc/​apache2/​ports.conf''​
 +     * Hint: Nu uitati sa modificati si in ''​VirtualHost''​
 +
 +  * Verificati folosind ''​netstat'',​ apoi un browser.
 +
 +  * Refaceti configuratia anterioara.
 +
 +
 +===== Alti clienti HTTP =====
 +
 +Desi in majoritatea cazurilor folosim un browser in mod grafic pentru a naviga, putem folosi si clienti in mod text (interactiv sau non-interactiv). Acestia sunt utili mai ales in automatizare.
 +
 +==== wget ====
 +
 +Un astfel de client in mod text, non-interactiv,​ este **wget**.
 +
 +  * Folositi ''​wget''​ pentru a descarca fisierul ''​index.html''​ servit de Apache. Ca parametru pentru ''​wget''​ veti folosi acelasi URL ca si in browser.
 +
 +=== Descarcare recursiva ===
 +
 +  * Creati urmatoarea ierarhie de fisiere in ''/​var/​www/​html'':​
 +<​code>​
 +test/
 +|-- docs/
 +|   |-- README.txt
 +|   |-- INSTALL.txt
 +|-- scripts/
 +|   |-- setup.sh
 +|   `-- install.sh
 +`-- test.html
 +</​code>​
 +
 +  * Folosind un browser in mod grafic, verificati ca puteti naviga prin acea ierarhie.
 +
 +  * Folosind ''​wget'',​ descarcati in mod recursiv tot ce este sub ''/​var/​www/​html/​test''​.
 +    * Hint: ''​man wget'',​ ''/​recursive''​
 +    * Specificati sa NU fie descarcate fisierele ale caror nume incepe cu ''​index.html''​. Hint: ''​man wget'',​ ''/​reject''​.
 +
 +=== Autentificare folosind wget ===
 +
 +  * Folosind ''​wget''​ incercati sa descarcati ce este la adresa ''​http://​repository.grid.pub.ro/​cs/​gsr/''​.
 +    * Ce eroare primiti? De ce?
 +
 +  * Incercati din nou, de data aceasta folosind autentificare HTTP. Pentru aceasta, va trebui:
 +    * Sa specificati userul cu care doriti sa va autentificati. Hint: ''​man wget'',​ ''/​user''​.
 +    * Sa faceti ca ''​wget''​ sa va ceara parola. Hint: ''​man wget'',​ ''/​ask-password''​.
 +
 +==== netcat (nc) ====
 +
 +De multe ori, in debugging, este util sa observati sau sa interveniti direct asupra datelor schimbate intre client si server. Un utilitar care ne ajuta in acest scop este **netcat** (comanda ''​nc''​). ​
 +
 +Acesta deschide o conexiune catre un host, pe un port specificat (TCP sau UDP), apoi va trimite catre server toate datele primite pe standard input.
 +
 +  * Folosind ''​nc'',​ conectati-va pe localhost, portul 80.
 +
 +  * Apoi, introduceti manual o cerere HTTP pentru fisierul ''​index.html''​. Veti folosi protocolul HTTP 1.0:
 +    * ''​GET /index.html HTTP/​1.0''​
 +    * Incheiati cererea cu secventa ''​\r\n\r\n''​ (doua Enter-uri).
 +    * Pagina primita este cea corecta?
 +
 +  * Realizati acelasi lucru, dar fara a mai introduce manual cererea.
 +    * Hint: ''​echo'',​ pipe
 +
 +===== Userdir =====
 +
 +Server-ul Apache permite utilizatorilor sa serveasca fisiere din propriile directoare home. Fisierele trebuie stocate in ''/​home/​username/​public_html'',​ iar acestea vor fi accesate folosind un URL de forma ''​http://​server/​~username''​.
 +
 +  * Creati utilizatorul ''​gsr''​.
 +  * Creati directorul ''​public_html''​ si mai multe fisiere in interiorul acestuia.
 +
 +  * Incercati sa accesati fisierele folosind URL-ul ce contine ''​~gsr''​. Este posibil?
 +
 +  * Pentru a putea accesa astfel de directoare, trebuie activat modulul Apache **userdir**.
 +    * Activati modulul ''​userdir''​. Hint: ''​a2enmod''​
 +    * Incercati din nou sa accesati URL-ul.
 +
 +===== PHP ====
 +
 +  * Creati in ''/​var/​www/​html''​ un fisier cu numele ''​index.php''​ care sa contina un cod PHP simplu (de exemplu, sa afiseze un mesaj):
 +<​code>​
 +<?php echo "​Hello,​ world!";​ ?>
 +</​code>​
 +
 +  * Apoi, dintr-un browser in mod grafic incercati sa accesati fisierul ''​index.php''​ de pe server. Ce observati? Script-ul PHP se ruleaza pe server? De ce?
 +
 +  * Instalati pachetul corespunzator modulului PHP pentru Apache (''​libapache2-mod-php''​).
 +  * Verificati ca modulul a fost activat. Hint: ''/​etc/​apache2/​mods-enabled''​.
 +  * Accesati din nou fisierul ''​index.php''​. Ce observati acum?
 +
 +===== Autentificare basic =====
 +
 +In anumite cazuri, este util sa restrictionam accesul catre anumite directoare ale site-ului. O modalitate este folosind feature-ul de autentificare din protocolul HTTP.
 +
 +  * Creati subdirectorul ''​secret''​ in ''/​var/​www/​html''​.
 +  * In acest subdirector,​ creati un fisier cu numele ''​.htaccess'',​ care sa specifice ca se doreste autentificare:​
 +<​code>​
 +AuthName "​restricted"​
 +AuthType Basic
 +AuthUserFile /​usr/​local/​my.htpasswd
 +Require valid-user
 +</​code>​
 +  * Apoi, folosind comanda ''​htpasswd'',​ creati un user ''​bob''​ in fisierul ''/​usr/​local/​my.htpasswd''​
 +  * In fisierul ''​apache2.conf'',​ setati directiva ''​AllowOverride''​ la ''​All''​
 +  * Restartati serviciul Apache si verificati ca incercand sa accesati, din browser, directorul ''​secret'',​ se cere autentificare.
 +
 +===== Virtual Hosts =====
 +
 +==== Configurare de baza ====
 +
 +  * In ''/​etc/​hosts'',​ adaugati 2 alias-uri, astfel incat host-urile ''​gsr.ro''​ si ''​www.gsr.ro''​ sa fie mapate pe adresa IP ''​127.0.0.1''​
 +<​solution -hidden -en><​code>​
 +root@mjolnir:​~#​ cat /etc/hosts | head -n 3
 +127.0.0.1 localhost
 +127.0.1.1 mjolnir.labs.cs.pub.ro mjolnir
 +127.0.0.1 gsr.ro www.gsr.ro
 +</​code></​solution>​
 +
 +  * In configuratia server-ului Apache, adaugati un Virtual Host pentru domeniul ''​gsr.ro''​.
 +    * Ca model, puteti folosi configuratia Virtual Host-ului pentru site-ul default din Apache.
 +  * Aveti in vedere urmatoarele:​
 +    * Fisierul de configurare al site-ului se va numi ''​gsr.ro.conf''​ si se va afla in directorul ''/​etc/​apache2/​sites-available''​.
 +    * Virtual Host-ul va fi mapat pe portul 80.
 +    * ServerName-ul va fi ''​gsr.ro''​
 +    * Adresa de mail a administatorului este ''​admin@gsr.ro''​
 +    * Site-ul va servi fisiere din directorul ''/​var/​www/​html/​gsr.ro''​
 +      * Creati in acest director un fisier ''​index.html''​ care sa afiseze mesajul ''​This is gsr.ro''​.
 +    * Fisierele de log pentru acest site vor fi in ''/​var/​log/​apache2/​gsr.ro.log''​ si ''/​var/​log/​apache2/​gsr.ro.err.log'' ​
 +
 +<​code>​
 +root@mjolnir:​~#​ mkdir /​var/​www/​html/​gsr.ro
 +
 +root@mjolnir:​~#​ echo "This is gsr.ro"​ > /​var/​www/​html/​gsr.ro/​index.html
 +
 +root@mjolnir:​~#​ cat /​etc/​apache2/​sites-available/​gsr.ro.conf
 +<​VirtualHost *:80>
 +        ServerAdmin admin@gsr.ro
 +        ServerName gsr.ro
 +
 +        DocumentRoot /​var/​www/​html/​gsr.ro
 +        <​Directory />
 +                Options FollowSymLinks
 +                AllowOverride None
 +        </​Directory>​
 +        <​Directory /​var/​www/​html/​gsr.ro/>​
 +                Options Indexes FollowSymLinks MultiViews
 +                AllowOverride None
 +                Order allow,deny
 +                allow from all
 +        </​Directory>​
 +
 +        ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​
 +
 +        ErrorLog /​var/​log/​apache2/​gsr.err.log
 +
 +        LogLevel warn
 +
 +        CustomLog /​var/​log/​apache2/​gsr.log combined
 +</​VirtualHost>​
 +</​code>​
 +
 +  * Activati site-ul ''​gsr.ro''​
 +    * Hint: ''​a2ensite''​.
 +<​solution -hidden -en><​code>​
 +root@mjolnir:​~#​ a2ensite gsr.ro
 +Enabling site gsr.ro.
 +To activate the new configuration,​ you need to run:
 +  service apache2 reload
 +
 +root@mjolnir:​~#​ /​etc/​init.d/​apache2 restart
 +Restarting web server: apache2[Fri Jan 27 18:29:34 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 + ... waiting [Fri Jan 27 18:29:35 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 +.
 +</​code></​solution>​
 +
 +  * Testati accesand adresa ''​http://​gsr.ro''​ intr-un browser.
 +
 +==== Alias-uri ====
 +
 +  *Vom configura 2 tipuri de alias-uri:
 +    * Alias-uri pentru partea de domeniu din URL.
 +    * Alias-uri pentru partea de cale (path) din URL.
 +
 +=== Alias pentru domeniu ===
 +
 +  * Pentru primul tip de alias-uri, configurati Virtual Host-ul ''​gsr.ro''​ astfel incat sa raspunda si la cereri pentru ''​www.gsr.ro''​
 +    * Hint: ''​ServerAlias''​
 +  * Testati accesand adresa ''​http://​www.gsr.ro''​ intr-un browser.
 +  ​
 +=== Alias pentru URL path ===  ​
 +  ​
 +  * Pentru al doilea tip de alias-uri, configurati Virtual Host-ul ''​gsr.ro''​ astfel incat la accesarea adresei ''​http://​gsr.ro/​config''​ sa fie afisat continutul directorului ''/​var/​www/​html/​gsr.ro/​configfiles''​.
 +    * Creati directorul ''/​var/​www/​html/​gsr.ro/​configfiles''​. In interiorul acestuia, creati fisierele ''​file1'',​ ''​file2''​ si ''​file3''​.
 +    * Hint: Puteti folosi ca model configuratia alias-ului ''​doc -> /​usr/​share/​doc''​ din fisierul de configurare al site-ului default al Apache.
 +  * Testati accesand adresa ''​http://​gsr.ro/​config''​ intr-un browser.
 +
 +<​code>​
 +root@mjolnir:​~#​ mkdir /​var/​www/​html/​gsr.ro/​configfiles
 +
 +root@mjolnir:​~#​ cd $_
 +
 +root@mjolnir:/​var/​www/​html/​gsr.ro/​configfiles#​ touch file1 file2 file3
 +
 +root@mjolnir:/​var/​www/​html/​gsr.ro/​configfiles#​ ls -l
 +total 0
 +-rw-r--r-- 1 root root 0 Jan 27 18:30 file1
 +-rw-r--r-- 1 root root 0 Jan 27 18:30 file2
 +-rw-r--r-- 1 root root 0 Jan 27 18:30 file3
 +
 +root@mjolnir:/​var/​www/​html/​gsr.ro/​configfiles#​ cd -
 +/root
 +
 +root@mjolnir:​~#​ cat /​etc/​apache2/​sites-available/​gsr.ro | tail -n 7
 +    Alias /config "/​var/​www/​html/​gsr.ro/​configfiles/"​
 +    <​Directory "/​var/​www/​html/​gsr.ro/​configfiles/">​
 +        Options Indexes MultiViews FollowSymLinks
 +        AllowOverride None
 +    </​Directory>​
 +
 +</​VirtualHost>​
 +
 +root@mjolnir:​~#​ /​etc/​init.d/​apache2 restart
 +Restarting web server: apache2[Fri Jan 27 18:32:57 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 + ... waiting [Fri Jan 27 18:32:58 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 +.
 +</​code>​
 +
 +==== Redirect ====
 +
 +  * Configurati site-ul ''​gsr.ro''​ astfel incat la accesarea adresei ''​http://​gsr.ro/​redirect''​ sa fiti redirectati catre ''​http://​ocw.cs.pub.ro/​courses/​gsr''​.
 +    * Hint: http://​httpd.apache.org/​docs/​2.2/​mod/​mod_alias.html#​redirect
 +    * Pentru testare, creati directorul ''/​var/​www/​html/​gsr.ro/​redirect''​.
 +    * In interiorul acestuia, creati un fisier ''​index.html''​ care sa afiseze mesajul ''​redirect''​
 +  * Testati accesand adresa ''​http://​gsr.ro/​redirect''​ intr-un browser.
 +
 +<​code>​
 +root@mjolnir:​~#​ mkdir /​var/​www/​html/​gsr.ro/​redirect
 +root@mjolnir:​~#​ echo "​redirect"​ > /​var/​www/​html/​gsr.ro/​redirect/​index.html
 +
 +root@mjolnir:​~#​ cat /​etc/​apache2/​sites-available/​gsr.ro | tail -n 3
 +    redirect /redirect http://​gsr.ro/​labs
 +
 +</​VirtualHost>​
 +
 +root@mjolnir:​~#​ /​etc/​init.d/​apache2 restart
 +Restarting web server: apache2[Fri Jan 27 18:41:54 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 + ... waiting [Fri Jan 27 18:41:55 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 +.
 +</​code>​
 +
 +==== Restrictionarea accesului pe baza adresei IP ====
 +
 +  * Configurati Virtual Host-ul ''​gsr.ro''​ pentru a se permite accesul la acesta **doar** de la adresa ''​127.0.0.1''​.
 +    * Hint: http://​httpd.apache.org/​docs/​2.2/​howto/​access.html
 +    * Hint: http://​httpd.apache.org/​docs/​2.2/​mod/​mod_authz_host.html#​allow
 +  * Nu uitati de directiva ''​Order deny,​allow'',​ care specifica ordinea in care sunt interpretate directivele Deny si Allow.
 +
 +  * Testati accesand adresa ''​http://​gsr.ro/''​ de pe sistemul local si adresa ''​http://​restricted.gsr.ro''​ de pe sistemul unui coleg.
 +    * In Virtual Host-ul ''​gsr.ro'',​ adaugati un nou ServerAlias,​ cu numele ''​restricted.gsr.ro''​
 +    * Pe sistemul colegului, adaugati o intrare in ''/​etc/​hosts''​ pentru ''​restricted.gsr.ro'',​ care sa se mapeze cu adresa IP a sistemului vostru.
 +
 +<​code>​
 +root@mjolnir:​~#​ cat /​etc/​apache2/​sites-available/​gsr.ro.conf
 +<​VirtualHost *:80>
 +        ServerName gsr.ro
 +        ServerAlias www.gsr.ro
 +        ServerAlias restricted.gsr.ro
 +
 +        DocumentRoot /​var/​www/​html/​gsr.ro
 +        <​Directory />
 +                Options FollowSymLinks
 +                AllowOverride None
 +        </​Directory>​
 +        <​Directory /​var/​www/​html/​gsr.ro/>​
 +                Options Indexes FollowSymLinks MultiViews
 +                AllowOverride None
 +                Order deny,allow
 +                allow from 127.0.0.1
 +                deny from all
 +        </​Directory>​
 +</​VirtualHost>​
 +
 +root@mjolnir:​~#​ /​etc/​init.d/​apache2 restart
 +Restarting web server: apache2[Fri Jan 27 19:27:55 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 + ... waiting [Fri Jan 27 19:27:56 2012] [warn] NameVirtualHost 172.16.7.133:​8080 has no VirtualHosts
 +.
 +</​code>​
 +
 +===== mod_rewrite =====
 +
 +Modulul ''​rewrite''​ din Apache permite rescrierea URL-urilor din request-urile HTTP, dupa anumite reguli.
 +
 +  * Configurati,​ ca in Laboratorul 3, modulul ''​userdir''​.
 +    * Hint: http://​ocw.cs.pub.ro/​courses/​gsr/​laboratoare/​laborator-03#​userdir
 +  * Folositi ''​mod_userdir''​ astfel incat cererile catre URL-uri de forma ''​gsr.ro/​users/​$username''​ sa fie rescrise in ''​gsr.ro/​~$username''​.
 +    * Hint: http://​httpd.apache.org/​docs/​2.2/​mod/​mod_rewrite.html
 +    * Hint: http://​httpd.apache.org/​docs/​2.0/​rewrite/​rewrite_guide.html#​canonicalhost
 +    * Hint: https://​httpd.apache.org/​docs/​2.2/​rewrite/​flags.html
 +
 +<​code>​
 +root@mjolnir:/​etc/​apache2/​sites-available#​ a2enmod rewrite
 +Enabling module rewrite.
 +To activate the new configuration,​ you need to run:
 +  service apache2 restart
 +  ​
 +root@mjolnir:/​etc/​apache2/​sites-available#​ cat gsr.ro | tail -n 5
 +        RewriteEngine On
 +        RewriteOptions Inherit
 +        RewriteRule ^/​users/​([^/​]+)/?​(.*) /~$1/$2 [R]
 +        RewriteRule ^/​~/​([^/​]+)$ /~$1/ [R]
 +</​VirtualHost>​
 +</​code>​
 +
 /* /*
 ===== Demo: Funcționarea serviciului DNS ===== ===== Demo: Funcționarea serviciului DNS =====
gsr/laboratoare/laborator-07.1475758443.txt.gz · Last modified: 2016/10/06 15:54 by george.milescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0