Differences

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

Link to this comparison view

gsr:laboratoare:laborator-07 [2016/12/08 11:24]
alexandru.carp
gsr:laboratoare:laborator-07 [2016/12/08 20:39] (current)
alexandru.carp
Line 1: Line 1:
 ====== Laborator 07: Servicii web ====== ====== Laborator 07: Servicii web ======
  
-===== Exerciții =====+<​note>​Documentatie:​ http://​httpd.apache.org/​docs/​2.2/</​note>​
  
-==== Instalare Apache si configurari de baza ====+===== Instalare Apache si configurari de baza =====
  
   * Instalati serverul Apache (pachetul **apache2**).   * Instalati serverul Apache (pachetul **apache2**).
Line 9: Line 9:
   * Apoi, verificati functionarea acestuia folosind un browser web. Va veti conecta pe URL-ul http://​localhost   * Apoi, verificati functionarea acestuia folosind un browser web. Va veti conecta pe URL-ul http://​localhost
  
-=== Site default ===+==== Site default ​====
  
   * Asa cum ati observat anterior, serverul Apache serveste in mod implicit un fisier HTML.    * Asa cum ati observat anterior, serverul Apache serveste in mod implicit un fisier HTML. 
Line 19: Line 19:
   * Modificati fisierul gasit anterior astfel incat sa contina mesajul "GSR web services"​.   * Modificati fisierul gasit anterior astfel incat sa contina mesajul "GSR web services"​.
  
-=== Listening ports ===+==== Listening ports ====
  
   * Pe ce port asculta in mod implicit serverul Apache? Investigati folosind ''​netstat''​.   * Pe ce port asculta in mod implicit serverul Apache? Investigati folosind ''​netstat''​.
Line 25: Line 25:
   * Modificati portul astfel incat Apache sa asculte pe 8080.   * Modificati portul astfel incat Apache sa asculte pe 8080.
      * Hint: ''/​etc/​apache2/​ports.conf''​      * Hint: ''/​etc/​apache2/​ports.conf''​
-     * Hint: Nu uitati sa modificati si ''​NameVirtualHost''​+     * Hint: Nu uitati sa modificati si in ''​VirtualHost''​
  
   * Verificati folosind ''​netstat'',​ apoi un browser.   * Verificati folosind ''​netstat'',​ apoi un browser.
Line 32: Line 32:
  
  
-==== Alti clienti HTTP ====+===== 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. 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 ===+==== wget ====
  
 Un astfel de client in mod text, non-interactiv,​ este **wget**. Un astfel de client in mod text, non-interactiv,​ este **wget**.
Line 42: Line 42:
   * Folositi ''​wget''​ pentru a descarca fisierul ''​index.html''​ servit de Apache. Ca parametru pentru ''​wget''​ veti folosi acelasi URL ca si in browser.   * 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 ==+=== Descarcare recursiva ​===
  
   * Creati urmatoarea ierarhie de fisiere in ''/​var/​www/​html'':​   * Creati urmatoarea ierarhie de fisiere in ''/​var/​www/​html'':​
Line 62: Line 62:
     * Specificati sa NU fie descarcate fisierele ale caror nume incepe cu ''​index.html''​. Hint: ''​man wget'',​ ''/​reject''​.     * Specificati sa NU fie descarcate fisierele ale caror nume incepe cu ''​index.html''​. Hint: ''​man wget'',​ ''/​reject''​.
  
-== Autentificare folosind wget ==+=== Autentificare folosind wget ===
  
   * Folosind ''​wget''​ incercati sa descarcati ce este la adresa ''​http://​repository.grid.pub.ro/​cs/​gsr/''​.   * Folosind ''​wget''​ incercati sa descarcati ce este la adresa ''​http://​repository.grid.pub.ro/​cs/​gsr/''​.
Line 71: Line 71:
     * Sa faceti ca ''​wget''​ sa va ceara parola. Hint: ''​man wget'',​ ''/​ask-password''​.     * Sa faceti ca ''​wget''​ sa va ceara parola. Hint: ''​man wget'',​ ''/​ask-password''​.
  
-=== netcat (nc) ===+==== 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''​). ​ 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''​). ​
Line 87: Line 87:
     * Hint: ''​echo'',​ pipe     * Hint: ''​echo'',​ pipe
  
-==== Userdir ====+===== 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''​. 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''​.
Line 100: Line 100:
     * Incercati din nou sa accesati URL-ul.     * Incercati din nou sa accesati URL-ul.
  
-==== PHP ===+===== 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):   * Creati in ''/​var/​www/​html''​ un fisier cu numele ''​index.php''​ care sa contina un cod PHP simplu (de exemplu, sa afiseze un mesaj):
Line 109: Line 109:
   * 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?   * 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-php5''​).+  * Instalati pachetul corespunzator modulului PHP pentru Apache (''​libapache2-mod-php''​).
   * Verificati ca modulul a fost activat. Hint: ''/​etc/​apache2/​mods-enabled''​.   * Verificati ca modulul a fost activat. Hint: ''/​etc/​apache2/​mods-enabled''​.
   * Accesati din nou fisierul ''​index.php''​. Ce observati acum?   * Accesati din nou fisierul ''​index.php''​. Ce observati acum?
  
-==== Autentificare basic ====+===== 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. 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.
Line 129: Line 129:
   * Restartati serviciul Apache si verificati ca incercand sa accesati, din browser, directorul ''​secret'',​ se cere autentificare.   * 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>​
  
 /* /*
gsr/laboratoare/laborator-07.1481189099.txt.gz · Last modified: 2016/12/08 11:24 by alexandru.carp
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