All posts tagged Apache

Per tal de servir planes web i interpretar PHP al vol, instal·larem l’IHS, l’IBM HTTP Server, que és un Apache millorat i assegurat. Pel que es veu, no s’integra dins del WAS i cal instal·lar-ho separat. És a dir que si no tenim intenció de servir aplicacions Java, ens podem saltar el pas 1.

El descarregarem del web d’IBM: IBM HTTP Server i procedim a instal·lar-ho com indica el document Hosting PHP applications on the IBM HTTP Server (gràcies Francisco) :


tar -xvf ihs.7000.linux.ia32.tar /root
cd IHS

Copiem responsefile.txt a opcions.txt editem aquest darrer i acceptem la llicència i modifiquem altres valors per omissió i esborrem la secció de windows:

-OPT silentInstallLicenseAcceptance="true"
-OPT disableOSPrereqChecking="true"
-OPT installLocation="/opt/IBM/HTTPServer"
-OPT createAdminAuth="true"
-OPT adminAuthUser="ihsadmin"
-OPT adminAuthPassword="xxxx"
-OPT adminAuthPasswordConfirm="xxxx"
-OPT runSetupAdmin="true"
-OPT setupAdminUser="ihsadmin"
-OPT setupAdminGroup="www-data"
-OPT washostname="blue.corretge.ct"

I executem la instal·lació en mode silenci, doncs no tenim instal·lades les X al servidor:

java -cp `pwd`/setup.jar -Xms48m -Xmx384m run -options "opcions.txt" -silent

I a nosaltres ens ha cascat. Bé, el fet d’estar en una distribució no suportada per IBM deu haver generate els problemes, així que instal·larem un Apache, serà una màquina blava al 50%. A fi de comptes l’IHS s’arrenca amb la instrucció apachectl.


sudo apt-get install apache2 apache2-threaded-dev apache2-mpm-prefork apache2-utils

I obtenim fàcilment el It works! de la felicitat.

Més endavant ja enllaçarem WASCE amb Apache HTTP Server via mod_jk.

Per a optimtizar l’espai en disc dels servidors, instal·larem totes les llibreries PHP en una carpeta única anomenada NetStudio.


mkdir /var/www/NetStudio

I procedirem a instal·lar diferents llibreries d’ús comú:

- crtphpfwk. Framework que modela les etiquetes HTML en objectes PHP.

svn co http://crtphpfwk.googlecode.com/svn/branches/2.0 crtphpfwk

- zajaj. Crida a mètodes de classes PHP desde JavaScript.

svn co http://zajaj.googlecode.com/svn/trunk zajaj

- jQuery. Llibreria de productivitat JavaScript.

svn co http://jqueryjs.googlecode.com/svn/trunk jquery-svn
cd /var/www/NetStudio/jquery-svn/jquery
make jquery
make pack

- jQuery-UI. Llibreria User Interface de jQuery

svn co http://jquery-ui.googlecode.com/svn/tags/latest jqueryUI-svn

- jsTree. Llibreria jQuery tree plugin (afegit maig del 2010)

svn checkout http://jstree.googlecode.com/svn/trunk/ jstree-svn

Tots els sevidors virtuals que emprin jQuery tindran aquesta instrucció

Alias /jquery /var/www/NetStudio/jquery-svn
Alias /jqueryUI /var/www/NetStudio/jqueryUI-svn
Alias /jstree /var/www/NetStudio/jstree-svn

- ZendFramework. Framework de Zend.

svn co http://framework.zend.com/svn/framework/standard/trunk ZendFramework

Afegirem aquest path al php.ini

include_path = ".:/var/www/NetStudio/ZendFramework/library"

Captura-Mozilla-Firefox

Seguint les recomanacions de Google per a la millora de la velocitat de càrrega de les planes, habilitarem al nostre servidor l’opció de compressió d’arxius amb el mod_deflate.

sudo a2enmod deflate

i editarem l’arxiu /etc/apache2/mods-available/deflate.conf per afegir els arxius JavaScript i CSS:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
</IfModule>

Reiniciem l’Apache i ja ho tindrem activat:

A Linux, per omissió, els arxius es poden assegurar a nivell d’usuari, de grup i/o de tothom, podent especificar si es tenen drets per a la lectura, l’escriptura/creació i/o el pas pel directori o l’execucció d’un programa. També existeix l’sticky bit que serveix per a indicar que es propagui el grup del directori pare i per a que només els propietaris dels arxius puguin canviar el nom o esborrar els arxius que pengin.

Amb la comanda ls -la obtindrem la informació sobre permisos dels arxius i directoris.
ls -la
total 20
drwxr-s--- 5 alexcor1 www-pgmr 4096 2008-10-02 08:57 .
drwxr-xr-x 20 root root 4096 2008-09-23 23:59 ..
drwxr-xr-x 5 alexcor1 alexcor1 4096 2008-10-02 08:40 default
drwxr-s--- 15 alexcor1 www-pgmr 4096 2008-09-17 09:15 NetStudio
drwxr-s--- 5 alexcor1 www-pgmr 4096 2008-09-24 13:49 vhosts

La primera posició és per a indicar el tipus d’element:
d = directori (mkdir)
- = arxiu
l = enllaç simbòlic (ln -s)
s = Unix domain socket (socketpair)
p = named pipe (mkfifo)
c = character device file
b = block device file

Segueixen tres blocs de tres lletres, el primer bloc per a permisos d’usuari, el segon per a permisos de grup i el tercer per a la resta. Aquestes lletres poden ser:
r = Lectura
w = Escriptura
x = Execucció
s = Sticky
- = Cap

Per assignar els permisos emprarem la comanda chmod amb els paràmetres (ugoa)(+-=)(rwxs) sent u per a establir permisos d’usuari, g de grup, o per a la resta i a per a tots tres. + per afegir, – per a rebocar i = per a establir. Per a dir que el propietari te permisos de lectura i escruptura, el grup només de lectura i la resta cap, executarem:
chmod u=rw arxiu
chmod g=r arxiu
chmod o= arxiu

Es podria fer tot d’una tocada amb chmod i un codi numèric que és la representació octal de cada un dels tres permisos possibles. Però és molt més agradable i entenedor treballar amb les lletres.

Després del digit, trobem el nome de l’usuari propietari de l’arxiu i el grup al que està assignat.

En un entorn de programació web, el que farem serà crear un grup anomenat www-pgmr al que pertanyeran els programadors i l’usuari que executa l’Apache.
addgroup www-pgmr
adduser alexcor1 www-pgmr
adduser www-data www-pgmr

Nota: Si els grups no es propaguen en els usuaris connectats actualment, cal reiniciar el sistema amb
sudo shutdown -r now

Indicarem que la carpeta /var/www tingui el grup www-pgmr i que aquest grup es propagui en els arxius que crearem activant l’Sticky byte.
chgrp -R www-pgmr /var/www
chmod g+s /var/www

Cal executar umask 27 o canviar-ho enlloc de 22 a /etc/profile o a ~/.profile amb el codi dels permisos en octal (27 = 000010111) per a que els nous arxius que creem tinguin el grup no tingui permisos d’escriptura i la resta d’usuaris no tinguin cap dret sobre els nous arxius.

Així si creem una carpeta i un arxiu
mkdir test
echo "User-agent: *" > test/robots.txt

Observarem que tant la carpeta com l’arxiu, s’han creat amb els permisos que volem:
ls -la test/
total 12
drwxr-s--- 2 alexcor1 www-pgmr 4096 2008-10-02 09:42 .
drwxr-s--- 6 alexcor1 www-pgmr 4096 2008-10-02 09:39 ..
-rw-r----- 1 alexcor1 www-pgmr 14 2008-10-02 09:42 robots.txt

Si necessitem operacions més complexes, llavors haurem de muntar la partició amb acl i emprar la comanda setfacl.

LAMP és l’acrònim de Linux, Apache, MySQL i PHP. És com es coneix el sistema de servidor d’aplicacions web més estès arreu d’InterNet.
La instal·lació és molt senzilla, només cal executar aquestes instruccions:
sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install php5 php5-mysql php5-gd
si fem http://localhost visualitzarem la plana situada a /var/www/

Hi ha dues maneres de reiniciar l’Apache, la hard:

sudo /etc/init.d/apache2 restart

i la soft:

sudo /etc/init.d/apache2 reload

La primera (restart) tanca immediatament tots els processos d’apache i l’arrenca de nou. És idèntic a fer una aturada i arrencada del servei apache, és més fiable, però triga més temps en fer-se.

La segona (reload) tanca els processos d’apache quan aquests han acabat de fer el que estaven fent, rellegeix els arxius de configuració i reobre els arxius de logs. Cada antic procés és reemplaçat per el nou procés que inicia immediatament a rebre les noves peticions.

Més informació sobre el tancament graceful de l’Apache en aquest enllaç

Un cop tenim el repositori Subversion creat, necessitarem poder accedir-hi des de altres ordinadors. Hi ha tres maneres de fer-ho: svn, svn+ssh i Apache. Explicarem el modus https per emprar xifrat en la comunicació i no obrir la màquina amb comptes ssh.

Instal·larem els mòduls svn i dav de l’Apache
apt-get install subversion libapache2-svn libapache-mod-dav

Crearem una clau per a la comunicació SSL com s’indica en aquest post.

Procedirem a la creació d’un VirtualServer dedicat només als repositoris subversion, en el nostre cas pgmr0.corretge.ct en el domini intern de la companyia a /etc/apache2/sites-avalibe/pgmr0.corretge.ct
<VirtualHost *:443>

ServerAdmin info@corretge.cat
ServerName pgmr0.corretge.ct:443

SSLCertificateFile /etc/apache2/ssl/ss.pgmr0.corretge.cat.key
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/ssl/svn_usuaris.txt
Require valid-user
SSLRequireSSL
</Location>

</VirtualHost>

Per a l’autentificació bàsica d’Apache, seguirem les indicacions d’aquest post.

Habilitarem aquest servidor virtual creant un enllaç a /etc/apache2/sites-enabled
ln -s ../sites-available/pgmr0.corretge.cat 777-pgmr0.corretge.cat

I rebotarem l’Apache
/etc/init.d/apache2 restart

Ara ja només queda recuperar l’estructura actual sotra trunk al nostre directori de treball fent
svn co --username $USUARI_A_USUARIS_TXT https://pgmr0.corretge.ct/svn/nourepo/trunk nourepo

Més informació sobre les comandes Subversion les trobareu en aquest gran llibre:
Version Control with Subversion.

feather

Una manera senzilla i poc segura d’autentificar una carpeta en un servidor web públic és emprar el mod_auth de Apache.

Com explica el manual d’Apache, cal crear una arxiu de contrasenyes fora de la ruta pública i un arxiu .htaccess a les carpetes a assegurar.

L’arxiu el creem amb la comanda htpasswd htpasswd -c /var/www/vhosts/xxx/contra/usuaris.pwd amic i ens demanarà la contrasenya per a l’usuari amic. Sense el paràmetre -c si volem afegir-ne més usuaris.

podem crear un arxiu de grups amb aquesta estructura: grup1: usuari1 usuari2
amics: usuari1 amic usuari3

I l’arxiu .htaccess tindrà aquesta fila AuthType Basic
AuthName "Area restringida."
AuthUserFile /var/www/vhosts/xxx/contra/usuaris.pwd
AuthGroupFile /var/www/vhosts/xxx/contra/grups.pwd
Require group amics

Si no definim els grups, farem el Require així
Require valid-user

Amb això ja tindríem una carpeta pública assegurada.

Ara només cal indicar a l’Apache que ha de fer cas d’aquesta parametrització concreta amb la instrucció
AllowOverride AuthConfig
a l’arxiu /etc/apache2/sites-available/elnostrearxiu.

El problema de mod_auth és que un cop ens hem autentificat el codi d’usuari i la contrasenya viatge amb nosaltres en totes les pàgines a la capçalera:
Request Headers
Host xxx
User-Agent Mozilla/5.0 (X11; U; Linux i686; ca; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11
Accept text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language ca,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Authorization Basic YW1pYzpUZXN0Q29udA==

Cert és que ara viatgen codificades en Base64 i no en text pla com ho feien fa anys, però clar, amb una senzilla utilitat de codificació/descodificació de Base64 online com aquesta, coneixereu el nom de l’usuari i la contrasenya.