Situatie
Ne propunem instalarea unui server complet pentru rularea de aplicatii web format din: Serverul HTTP Apache,OpenSSL pentru criptarea comunicatiei folosind public key cryptography, PHP si serverul de baze de date MySql. Suplimentar, va fi instalat si phpMyAdmin pentru managementul bazelor de date, iar serverele precizate vor fi configurare avand in vedere securitate si eficienta, astfel incat sa poata fi folosite intr-un mediu real.
Observatii:
– se vor instala package-urile din repozitoarele standard ale Ubuntu 14.04 LTS;
– denumirele programelor si locatia fisierelor de configurare sunt specifice Ubuntu;
– toate comenzile se executa cu drepturi de root (sudo su);
– in exemplele de mai jos, adresa serverului web este localhost (daca clientul si serverul se gasesc pe acelasi calculator) sau 192.168.0.100 daca sunt pe calc. diferite dar in acelasi LAN);
Solutie
Pasi de urmat
INSTALAREA
1. Instalare Server MySql
Se ruleaza comanda sudo apt-get install mysql-server mysql-client
Nota: se va solicita setarea unei parole pt. userul root@localhost
Fisierul de configurare pentru client si server este: /etc/mysql/my.cnf
2. Instalare Apache2
Se ruleaza comanda sudo apt-get install apache2
Default DocumentRoot este /var/www/html
Testare: cu browserul accesam http://localhost sau http://192.168.0.100 si trebuie sa obtinem o pagina asemanatoare cu ce din imaginea de mai jos.
Deoarece configurarea serverului Apache este dificila si exista foarte multe optiuni de configurare, se recomanda instalarea locala a manualului serverului, pentru un acces mai usor la acesta.
se ruleaza comanda sudo apt-get install apache2-doc
Accesarea manualului se face tastand adresa: http://localhost/manual
3. Instalare PHP5
Se ruleaza comanda sudo apt-get install php5 libapache2-mod-php5
Nota: PHP5 va rula ca modul pt. Apache2. Orice modificare a fisierului de configurare pentru PHP (php.ini), trebuie sa determine restartarea serverului Apache. Serverul Apache se restarteaza astfel: service apache2 restart
Testare PHP: in DocumentRoot (/var/www) cream un fisier cu extensia .php, cu urmatorul continut, pe care-l accesam cu browserul la adresa http://localhost/fisier.php:
<?php
phpinfo();
?>
Trebuie sa obtinem o pagina asemanatoare cu cea din imaginea de mai jos.
4. Instalare suport PHP pentru comunicatia cu serverul MySql
Se ruleaza comanda sudo apt-get install php5-mysql
Optional, se instaleaza suport PHP pt. alte tehnologii sau servere (php5-imap, php5-mcrypt, php5-memcache etc)
Se testeaza feature-ul respectiv in outputul functiei phpinfo();
5. Instalare phpMyAdmin
Se ruleaza comanda sudo apt-get install phpmyadmin
Se vor solicita:
– Web server to reconfigure automatically: <– apache2
– Configure database for phpmyadmin with dbconfig-common? <– No
Dupa aceea se acceseaza phpMyAdmin la adresa http://192.168.0.100/phpmyadmin/ si se obtine o pagina precum cea din imaginea de mai jos:
CONFIGURAREA
1. MySql
Bazele de date se gasesc in directorul specificat de optiunea DATADIR din /etc/mysql/my.cnf
Acesta trebuie sa fie owned de userul sub care ruleaza serverul (Exemplu: chown -R mysql.mysql /var/lib/mysql)
Functionarea serverului MySql se bazeaza pe o serie de variabile.
Afisare variabile folosite de mysqld:
Afisare threaduri mysql precum si informatii despre acestea:
Mytop reprezinta un script care se conecteaza la serverul mysqld si ruleaza continuu show status si show processlist. Este util pentru a vedea in timp real threadurile mysql.Instalare: sudo apt-get install mytopFisierul de configurare folosit pt. conectarea la server este ~/.mytop si are continutul:
MySql Query CacheAcesta este feature care salveaza intr-un cache SELECT-urile query impreuna cu rezultatul trimis clientului si este foarte util pentru tabelele al caror continut nu se schimba foarte des (Exemplu: tabel cu tarile globului).Cache-ul este impartit intre sesiuni, astfel incat un rezultat al unui client este folosit si de un altul. Cache-ul este mereu actual si reliable. Orice modificare a tabelului care contine datele rezulta flushul cacheului;
Dimensiunea minima a cache-ului este 40KB, o valoare mai mica genereaza warning;
Pentru a afisa warningurile:
Daca query_cache_size este mai mare ca zero, atunci query_cache_type influenteaza la ce se face cache. Valorile posibile pentru query_cache_type sunt:
0 – dezactiveaza caching
1 – face caching la toate selecturile mai putin cele care sunt de genul SELECT SQL_NO_CACHE
2 – face caching la toate selecturile de genul SELECT SQL_CACHE
query_cache_limit stabileste dimensiunea maxima pt. un cache la un anumit query. Default este 1MB.
Aceste optiuni se seteaza in /etc/mysql/my.cnf
2. Configurare Apache
Structura fisiere de configurare (valabil pe Ubuntu si distributiile inrudine: Mint, Debian, Kubuntu etc):
2.1 Fisiere de configurare (toate se gasesc in /etc/apache2, iar toate caile folosite ulterior vor fi relative la acest director):
– apache2.conf -> main configuration file care include toate celelalte fisiere; – ports.conf -> specifica portul si interfetele pe care asculta serverul; – envvars – contine variable de configurare (Exemplu: userul si grupul sub care ruleaza apache2) –mods-enabled/ -> director care contine fisiere cu optiuni pentru incarcarea diferite module precum si optiuni de config pentru modulele respective; – conf-enabled/ -> director care contine fisiere cu diferite alte optiuni de configurare; – site-enabled/ -> director care contine fisiere cu configuratii pt. virtual hosting;
Fisierele din cele 3 directoare de mai sus sunt symlinkuri catre fisierele din directoarele mods-available/, conf-available/ sisite-available/
Managemenul symlinkurilor se realizeaza folosind utilitarele: a2enmod, a2dismod, a2ensite, a2dissite, a2enconf,a2disconf (Exemplu: a2enconf security, a2dismod status).
2.2. Configurare Virtual Hosting
In acest exemplu vom crea un Virtual Host numit www.exemplu.ro. Acest domeniu trebuie sa fie rezolvat de serverul DNS autoritativ in IP-ul serverului web. Daca acest lucru nu este posibil, se poate realiza doar pentru testare, o asociere statica intre numele domeniului si IP-ul serverului in /etc/hosts
a) crearea fisier in /etc/apache2/site-available cu continutul:
<VirtualHost *:80>
ServerName exemplu.ro
ServerAlias www.exemplu.ro
DocumentRoot /var/www/exemplu.ro
</VirtualHost>
Atentie: numele fisierului trebuie sa se termine in .conf sau se modifica in apache2.conf linia de includere fisiere. (Exemplu:exemplu.ro.conf)
b) creare symlink in site-enabled/ catre fisierul din site-available/
Se executa: a2ensite exemplu.ro
2.3. Server Status
a) activare modul: a2enmod status
b) configurare in /etc/apache2/mods-available/status.conf
<Location /server-status>
SetHandler server-status
#IP-ul clientului care va putea accesa
Require ip 192.168.1.0/24
</Location>
ExtendedStatus On
Nota: Un handler este o denumire pentru o actiune definita intern in Apache.
2.4. Server Info
a) activare modul: a2enmod info
b) configurare in /etc/apache2/mods-available/info.conf
<Location /server-info>
SetHandler server-info
#IP-ul clientului care va putea accesa
Require local
Require ip 192.168.1.0/24
</Location>
2.5. Mod Deflate
a) activare modul deflate si filter: a2enmod deflate, a2enmod filter
b) configurare in /etc/apache2/mods-available/deflate.conf
<IfModule mod_deflate.c>
#specificarea tipurilor de fisiere care vor fi comprimate
# these are known to be safe with MSIE 6
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
#specifica numele unei note care se va atasa requestului si contine ratia de compresie
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
</IfModule>
2.6. OpenSSL
a) Instalare: se ruleaza comanda sudo apt-get install openssl
b) Activare modul: a2enmod ssl
c) creare director unde se vor salva cheia privata a serverului si certificatul (self-signed pentru moment).
Generare cheie privata si certificat rsa
Se ruleaza comanda sudo mkdir /etc/apache2/ssl, iar apoi se ruleaza
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Atentie: common name trebuie sa fie hotname-ul scris in browser de user, altfel eroare.
d) modificare in fisierul de configurare al Virtual Hostului (/etc/apache2/sites-available/exemplu.ro.conf) conform noilor cai catre cheie si certificat.
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
ServerName exemplu.ro
ServerAlias www.exemplu.ro
DocumentRoot /var/www/exemplu.ro
#daca se doreste contrulul accesului la resurse in functie de IP
<Directory /var/www/exemplu.ro/secret>
Order Allow,Deny
Allow from 127.0.0.1
Allow from 192.168.1.11
Allow from 11.0.0.0/8
</Directory>
</VirtualHost>
Leave A Comment?