Table of Contents

Laborator 07: Servicii web

Instalare Apache si configurari de baza

Site default

Listening ports

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.

Descarcare recursiva

test/
|-- docs/
|   |-- README.txt
|   |-- INSTALL.txt
|-- scripts/
|   |-- setup.sh
|   `-- install.sh
`-- test.html

Autentificare folosind wget

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.

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.

PHP

<?php echo "Hello, world!"; ?>

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.

AuthName "restricted"
AuthType Basic
AuthUserFile /usr/local/my.htpasswd
Require valid-user

Virtual Hosts

Configurare de baza

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>

Alias-uri

Alias pentru domeniu

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.
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
.

Redirect

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
.

Restrictionarea accesului pe baza adresei IP

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
.

mod_rewrite

Modulul rewrite din Apache permite rescrierea URL-urilor din request-urile HTTP, dupa anumite reguli.

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>