Archivio

Archivio per la categoria ‘Apache’

Installare la suexec e mod_fcgid con apache2 in Debian Lenny

14 settembre 2009 Luca 2 commenti

apacheDi default il web server apache esegue gli script php di un sito con l’utente “www-data”. Per permettere ad uno script di memorizzare dati all’interno di una directory, allora i permessi di quest’ultima devono essere settati a 777 oppure il proprietario della cartella deve essere l’utente “www-data”. In questo caso, se sul vostro server web e’ attivo piu’ di un sito internet, allora uno script di un dominio potrebbe modificare i dati di un’altro. Come fare per ovviare a questo problema?  Eseguendo gli script di ogni sito con un utente distinto installando la suexec, mod_fcgid ed utilizzando il php in modalita’ cgi. Piu’ difficile a dirsi che a farsi, bastano difatti pochi comandi e qualche minuto per configurare il tutto:

1) Innanzitutto e’ necessario installare la suexec, il modulo fcgid ed il
php come cgi:

apt-get install apache2-suexec libapache2-mod-fcgid php5-cgi

2) Abilitiamo questi due moduli:

a2enmod suexec
a2enmod fcgid

3) Adesso dovremo forzare il PHP a correggere il percorso del cgi in modo conforme alle specifiche PATH_INFO/PATH_TRANSLATED. Bastera’ aggiungere nel php.ini (/etc/php5/cgi/php.ini) questa direttiva:

cgi.fix_pathinfo = 1

4)Andiamo a creare l’utente proprietario del sito:

adduser utente-sito

5) Creiamo le directory che conterra’ il sito web ed impostiamo su essa il
corretto proprietario:

mkdir -p /var/www/vhosts/sito1/htdocs
chown utente-sito:utente-sito /var/www/vhosts/sito1/htdocs

N.B. La suexec e’ precompilata per contenere i siti in /var/www
Potrete verificarlo eseguendo questo comando e leggendo il contenuto della
variabile AP_DOC_ROOT:
/usr/lib/apache2/suexec -V
Per modificarlo purtroppo dovrete ricompilare la suexec

6) Creiamo il wrapper che utilizzeremo per avviare il php e configurare mod-fcgid:

mkdir -p /var/www/fcgid-conf-sito1

Inseriamo nel file /var/www/fcgid-conf-sito1/sito1.conf questo:

#!/bin/sh
export PHPRC=/etc/php5/cgi
export PHP_FCGI_MAX_REQUESTS=400
export PHP_FCGI_CHILDREN=2
exec /usr/lib/cgi-bin/php

PHPRC,PHP_FCGI_MAX_REQUESTS e PHP_FCGI_CHILDREN sono opzionali e se verranno omessi sara’ impostato il valore di default. Sono utili per poter indicare il percorso del php.ini, permettendo cosi’ di utilizzare una configurazione diversa da sito a sito, oppure per definire il numero di child per processo ed il numero di richieste che puo’ gestire prima di terminare.

7) Impostiamo i permessi ed il corretto proprietario del wrapper:

chmod 755 /var/www/fcgid-conf-sito1/sito1.conf
chown -R utente-sito:utente-sito /var/www/fcgid-conf-sito1

8 ) Non ci rimane che inserire questo codice nella configurazione del sito:

<IfModule mod_fcgid.c>
SuexecUserGroup utente-sito utente-sito
PHP_Fix_Pathinfo_Enable 1
<Directory /var/www/vhosts/sito1/htdocs>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/fcgid-conf-sito1/sito1.conf .php
Order allow,deny
Allow from all
</Directory>
</IfModule>

9) Riavviamo il server web:

/etc/init.d/apache2 restart

Directory protetta da password (.htaccess/.htpasswd)

9 settembre 2009 Luca Nessun commento

apacheSe il vostro server web e’ apache allora potrete proteggere il vostro sito o una parte di esso utilizzando un file .htaccess
In questo modo visitando quella determinata URL potrete visualizzarne il contenuto solamente se siete a conoscenza delle relative credenziali di autenticazione.

Ecco come fare!

1) La password verra’ salvata in forma criptata in un file nel vostro sito.
Per generare la password criptata clicca qui

Inserisci la stringa ottenuta compilando il form online in un file chiamato .htpasswd posto nella cartella che vuoi proteggere.

N.B. Se avete accesso al server via ssh, potrete generare il file .htpasswd con questo comando:
htpasswd -c -d -b .htpasswd username password
Se dovete aggiungere piu’ utenti, omettete l’opzione ‘-c’

2) Sempre in quella directory adesso crea un file chiamato .htaccess e memorizza questo al suo interno:

AuthUserFile .htpasswd
AuthName “Area Protetta”
AuthType Basic
require valid-user

N.B. Se ricevere il messaggio di errore “Internal Server Error” inserite come prima riga anche la direttiva “AuthBasicProvider file”. Alcune volte inoltre (in base alla configurazione del server), e’ necessario specificare il percorso completo del file “.htpasswd” (ad es. /home/sito/htdocs/cartella_protetta/.htpasswd)

Riproduci filmati in streaming dal tuo sito

3 settembre 2009 Luca 1 commento

Contrariamente a quanto si potrebbe pensare, visualizzare filmati in streaming dal proprio sito e’ un’operazione davvero semplice. Basta installare il modulo mod_flvx nel web server apache e pubblicare i tuoi video insieme ad un player flash. Cliccate su questo link per vedere un esempio di streaming.

Questi sono i passi da fare:

1) Installare il modulo mod_flvx su apache2
2) Pubblicare sul sito un player flash
3) Calcolare i meta data ed inserirli all’interno del file che volete riprodurre
4) Preparare la pagina web per lo streaming

1)
mod_flvx e’ gratuito, coperto da licenza Apache License v2 http://www.apache.org/licenses/LICENSE-2.0 e si puo’ scaricare qui
Per compilarlo bastera’ eseguire questo comando (con utente root):

apxs2 -i -a -c mod_flvx.c

N.B. Per compilare mod_flvx viene utilizzata l’applicazione ‘apxs2′ (APache eXtension). Se non e’ presente nel vostro sistema dovrete installarla. Per chi utilizza la distribuzione Debian bastera’ digitare “apt-get install apache2-prefork-dev”

Adesso nella configurazione del web server apache (/etc/apache2/httpd.conf in Debian 5.0) si dovranno inserire le seguenti direttive:

LoadModule flvx_module /usr/lib/apache2/modules/mod_flvx.so
AddHandler flv-stream .flv

Si dovra’ riavviare il servizio:

/etc/init.d/apache2 restart

2)
Come anticipato dovremo pubblicare nel nostro sito anche il player flash (oltre che i video da riprodurre).  Il player da utilizzare potrete prelevarlo qui

E’ gratuito per usi non commerciali, altrimenti e’ necessario acquistare la licenza (il sito ufficiale e’ http://www.topfstedt.de)

3)
Dopo aver preparato il vostro video dovrete calcolare i meta data ed inserirli all’interno del file. Questo si fa con l’applicazione (gratuita) flvtool2 . Con le distribuzioni linux Debian o Ubuntu potrete installarla con il comando “apt-get install flvtool2″.
Il comando da eseguire e’ questo:

flvtool2 -U video.flv

4)
A questo punto non rimane che inserire questo codice nella pagina web che dovra’ contenere il video (modificando ovviamente www.NomeDelTuoSito.it, il percorso di FLVScrubber2.swf ed il nome del file video):

<object width=”384″ height=”288″>
<param
name=”movie”
value=”http://www.NomeDelTuoSito.it/FLVScrubber2.swf?file=VideoDaRiprodurre.flv&bufferTime=2&startAt=0&autoStart=true” />
<param name=”allowScriptAccess” value=”sameDomain” />
<param name=”allowFullScreen” value=”true” />
<embed
src=”http://www.NomeDelTuoSito.it/FLVScrubber2.swf?file=VideoDaRiprodurre.flv&bufferTime=2&startAt=0&autoStart=true”
type=”application/x-shockwave-flash”
allowScriptAccess=”sameDomain”
allowFullScreen=”true”
width=”384″ height=”288″ />
</object>

Riavvio di apache fallito

2 settembre 2009 loade 2 commenti

Può capitare, specialmente su server con un alto traffico, che il riavvio del web server fallisca con un errore del tipo:

failed: No space left on device

Se lo spazio non è realmente terminato, il problema è sicuramente legato ai semafori di apache.

Con il seguente comando potete verificare se sono rimasti attivi alcuni semafori :

ipcs -s

—— Semaphore Arrays ——–
key        semid      owner      perms      nsems
0×00000000 1835008    www-data  600        1
0×00000000 1867777    www-data  600        1
0×00000000 1900546    www-data  600        1
0×00000000 1933315    www-data  600        1

A questo punto potete cancellare i semafori rimasti attivi con il comando:

for i in `ipcs -s | awk ‘/www-data/ {print $2}’`; do (ipcrm -s $i); done

Nel caso volessimo aumentare le capacità del nostro webserver:

vi /etc/sysctl.conf

aggiungere le seguenti variabili:

kernel.msgmni = 1024
kernel.sem = 250 256000 32 1024

per far caricare le impostazioni al kernel direttamente:

sysctl -p

Per vedere se il kernel ha preso le nuove impostazioni:

ipcs -l

—— Shared Memory Limits ——–
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1

—— Semaphore Limits ——–
max number of arrays = 1024
max semaphores per array = 250
max semaphores system wide = 256000
max ops per semop call = 32
semaphore max value = 32767

—— Messages: Limits ——–
max queues system wide = 1024
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

Per approfondimenti:

kernel-msgmni, kernel-sem