SMsoft – informatica e dintorni

varie su OSX, GNU/Linux e l'Open Source

Apache: redirect da http ad https

Abbiamo un nome a dominio www.pippo.it e vogliamo che qualsiasi pagina di questo dominio venga richiamata, si venga rediretti verso l’omonimo dominio con protocollo https. In pratica richiamando qualcosa del tipo:

http://www.pippo.it/index.html

in automatico il visitatore deve essere rediretto verso:

https://www.pippo.it/index.html

Bene, avremo sicuramente due file di configurazione di apache, uno che gestisce il dominio in https ed uno per il dominio in http. Apriamo il file di configurazione del dominio http dove troviamo qualcosa del tipo:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName  www.pippo.it
  ServerAlias pippo.it

  DocumentRoot /var/www/pippo
... ...
</VirtualHost>

ed aggiungiamo:

RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 2

Ora facciamo rileggere la configurazione ad apache:

/etc/init.d/apache2 reload

ed il gioco è fatto.

enjoy!

Test di carico (stress / regression test and benchmark utility) per server web

Per verificare come un server web risponde alle richieste più consistenti, vanno effettuati dei test prima del rilascio. Questo consente di capire se la configurazione è corretta, se l’hardware è adeguato ed anche, in qualche modo, se gli script sono ottimizzati.

Ci sono tanti strumenti per fare queste verifiche, alcuni a pagamenti, altri gratuiti. Oggi vi parlo di un software Open Source che fa perfettamente il questo lavoro: effettua delle richieste ad un server web e ne indica i risultati. Siamo parlando di Siege (stress / regression test and benchmark utility), un software scritto per GNU/Linux e portato su altre piattaforme (AIX, BSD, HP-UX e Solaris). In linea di massima si dovrebbe poter compilare sui vari derivati UNIX System V e sui nuovi sistemi BSD.

L’installazione su Debian è molto semplice:

atp-get install siege

mentre per le altre distro o SO rimando alla documentazione nel sito ufficiale.

Siege può essere eseguito per simulare connessioni ssimultanee da parte di un certo numero di utenti contemporanei (parametro c) per un certo numero di volte (parametro r) per una determinata durata (parametro t). Ma passiamo all’opera. Ad esempio, per verificare la risposta a 10 utenti simultanei che richiamano tre volte la pagina indice del server web attivo su localhost, basterà eseguire:

siege -b -c 10 -r 3 http://localhost

Questo darà un dettaglio delle singole connessioni ed un riepilogo del tipo:

Transactions:                     30 hits
Availability:                 100.00 %
Elapsed time:                   0.13 secs
Data transferred:               0.00 MB
Response time:                  0.03 secs
Transaction rate:             230.77 trans/sec
Throughput:                     0.01 MB/sec
Concurrency:                    6.46
Successful transactions:          30
Failed transactions:               0
Longest transaction:            0.06
Shortest transaction:           0.00

Bene, questo potrebbe essere utile per capire come risponde una determinata pagina, ma generalmente la navigazione degli utenti interessa tutto il sito, o almeno parte del sito. In questo caso è molto più utile raccogliere un elenco di pagine (che si presume possano essere le più visitate) e poi farle “navigare” per noi da Siege. Se raccogliamo i vari indirizzi in una file chiamato urls.txt (uno per riga a cui possiamo anche impostare dei valori da passare in GET o POST), e vogliamo far navigare queste pagine in modo random a 10 utenti, per 5 minuti con un ritardo tra il richiamo di una pagina e l’altra di 5 secondi (diciamo il tempo minimo per dare uno sguardo ad una pagina), possiamo eseguire:

siege -c 30 -t 5m -d 5 -i -f urls.txt

Questo testo sicuramente potrà dare informazioni più interessanti da analizzare.
Sicuramente la posibilità di far “navigare” alcuni indirizzi può essere interessante; vi segnalo Sproxy, un altro tool degli stessi sviluppatori, che attiva sul proprio PC un proxy da configurare nel browser e che permette di raccogliere i dati di una sessione di navigazione da poter poi passare a Siege.

Per finire, ricordo che alcuni parametri di siege possono essere impostati nel file ~/.siegerc. Per creare un file con valori di default ed i commenti, basterà eseguire:

siege.config

Generalmente viene creato anche un file di log, posizionato in /var/siege.log.

enjoy

Installare il modulo per lo Streaming H264 con Apache su Debian

Il termine streaming sta ad indicare la possibilità di visualizzare un video presente su web senza attenderne il completo scaricamento. Un’altra caratteristica è la possibilità di poter avanzare velocemente e visualizzare il video a partire da un qualsiasi punto dello stesso.
Apache non è un server di streaming, ma è possibile installare un modulo che consente di farlo. Il modulo è l’H264 streaming e può essere installato facilmente su debian nel seguente modo:
- installare alcune librerie necessarie alla compilazione:

apt-get install apache2-threaded-dev

- scaricare i sorgenti del modulo H264 per lo streaming

wget http://h264.code-shop.com/download/apache_mod_h264_streaming-2.2.7.tar.gz

- decomprimere l’archivio e posizionarsi nella directory creata:

tar -zxvf apache_mod_h264_streaming-2.2.7.tar.gz
cd mod_h264_streaming-2.2.7/

- avviare la compilazione del modulo,

./configure --with-apxs=`which apxs2`
make
make install

- creare il file per caricare il modulo:

vi /etc/apache2/mods-available/h264.load

- inserire nel file quanto segue:

LoadModule h264_streaming_module /usr/lib/apache2/modules/mod_h264_streaming.so

- creare il file per la configurazione del modulo

vi /etc/apache2/mods-available/h264.conf

- inserire nel file quanto segue:

AddHandler h264-streaming.extensions .mp4
AddHandler h264-streaming.extensions .m4v

- a questo punto attivare il modulo e riavviare apache:

a2enmod h264
/etc/init.d/apache2 restart

Bene, il più è fatto. Ora si può verificare se il modulo funziona correttamente. Un sistema molto semplice è spartano è quello di caricare il video in formato h264 (.mp4 o .m4v) nello spazio web e poi richiamarlo con un client (es VLC o il client integrato nel browser) aggiungendo al nome del file la stringa ?start=5 che significa avviare il video a partire da 5 secondi. Ad esempio se il video è sul sito localhost e si chiama pippo.mp4, potete richiamare:

http://localhost/pippo.mp4?start=5

Tra i client web che potete usare, vale la pena citare:
FCPlayer by Fastcat Software.
JW FLV Media Player.
Flowplayer. Il modulo per lo Streaming H264 è disponibile qui.

enjoy

Nascondere dettagli su Apache e PHP ai visitatori

Quando viene richiamata una pagina web vengono inviate al cliente una serie di informazioni che generalmente non sono visualizzate, perché interpretate dal browser, ma se effettuiamo una richiesta tramite telnet possiamo visionarle. Ad esempio:

telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Fri, 04 Sep 2009 14:48:57 GMT
Server: Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2
Content-Length: 315
Connection: close
Content-Type: text/html; charset=iso-8859-1

In grassetto ho evidenziato i dettagli relativi alla versione di apache e di php. In alcuni casi è possibile anche vedere altre informazioni.
Per evitare che il server web risponda con questi dettagli, dobbiamo modificare il file di configurazione, generalmente apache2.conf, ed inserire (o modificare nel caso le direttive siano già presenti con altri valori):

ServerSignature Off
ServerTokens Prod

Oltre a questa variazione nella configurazione di Apache, è opportuno modificare anche PHP in modo che non fornisca dettagli sulla versione (questo rimuoverà la riga X-Powered-By nell’header delle pagine web php richiamate). Occorre modificare il file php.ini ed in particolare la direttiva:

expose_php = Off

Fatto questo basterà riavviare apache, con il classico:

#/etc/init.d/apache2 restart

ed infine si potrà testare che non vengano più mostrate queste informazioni:

telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Fri, 04 Sep 2009 15:05:13 GMT
Server: Apache
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

Enjoy

 

Installare pacchetti da sorgenti su Debian

Come sicuramente sapete, è possibile installare software precompilato nella vostra Linux Box basata su Debian, scaricandolo dai vari repository tramite il comodo apt-get. In alcuni casi potrebbe essere utile compilare il software manualmente, perché è necessario modificare qualche parametro di configurazione, oppure aggiungere qualche funzionalità oppure installare una particolare patch. La procedura non è molto complessa e ci si può basare sui sorgenti utilizzati nei repository Debian per i pacchetti precompilati.

Vediamo come procedere compilando un pacchetto di esempio. Scegliamo di compilare apache2 a cui aggiungiamo una patch.
Innanzitutto bisogna assicurarsi di avere il riferimento a deb-src nel file /etc/apt/sources.list. Nel caso non ci sia nessuna riga di questo tipo, se ne può aggiungere una come segue:

deb-src http://ftp.it.debian.org/debian/ testing/updates main contrib non-free

Installiamo intanto alcuni tools che ci serviranno successivamente per la compilazione:

apt-get install dpkg-dev build-essential devscripts

Ora creiamo le cartelle in cui lavorare:

# mkdir /usr/src/apache2-src
# cd /usr/src/apache2-src
# apt-get source apache2

Ora nella cartella troverete diversi file:

# ls
apache2_2.2.9  apache2_2.2.9-10+lenny2.diff.gz  apache2_2.2.9-10+lenny2.dsc  apache2_2.2.9.orig.tar.gz

A questo punto possiamo spostarci nella cartella apache2-2.2.9 con i sorgenti ed effettuare le necessarie modifiche.
Bene, ora scarichiamo i pacchetti che contendono le librerie necessarie per la compilazione con:

# apt-get build-dep apache2

Ora entriamo nella cartella con i sorgenti ed installiamo la patch che ipotizziamo sia /tmp/apache2.patch

# cd apache2_2.2.9
# patch -p1 < /tmp/apache2.patch

Infine, per avviare la compilazione vera e propria, dalla cartella dove sono i sorgenti del pacchetto che abbiamo appena personalizzato, digitiamo:

# dpkg-buildpackage -rfakeroot -uc -b

dove le opzioni servono per:
b = Crea solo il pacchetto binario e non quello dei sorgenti
-uc = Non crea il file .changes

ATTENZIONE: Per passare opzioni aggiuntibe alla procedura di compilazione, si può inizializzare la variabile d’ambiente DEB_BUILD_OPTIONS

DEB_BUILD_OPTIONS="--enable-gui --enable-radio" fakeroot debian/rules binary

Per passare parametri al MakeFile, come ad esempio l’uso del gcc 3.4:

CC=gcc-3.4 DEB_BUILD_OPTIONS="--enable-gui --enable-radio" fakeroot debian/rules binary

A questo punto i pacchetti (binario e librerie) sono pronti e sono stati creati nella cartella di livello superiore. Spostiamoci in tale cartella ed installiamo il pacchetto di cui abbiamo bisogno tra quelli disponibili:

# cd ..
# ls
# dpkg -i XXXXXXX.deb

dove XXXXXXX.deb è chiaramente il pacchetto da noi scelto per l’installazione

apache2 ed il sito di default

Apache2 visualizza in automatico un sito di default, se quello che viene richiamato non e’ stato configurato…

Qual e’ il sito di default? Come lo sceglie Apache2?

Semplice… E’ il primo in ordine alfabetico.

A questo punto la cosa migliore da fare e creare la configurazione per  il sito di default (o i siti se gestite sia http che https) con dei nomi che iniziano per 0, ad esempio:

/etc/apache2/sites-available/000-default
/etc/apache2/sites-available/000-default-ssl

Apache e OCFS2

Se avete necessità di utilizzare un disco OCFS2, o un network file system (es. nfs, smb, etc), come document_root di uno o più server web apache, vi consiglio di aggiungere le due seguenti direttive alla configurazione di apache:

EnableSendfile Off
EnableMMAP Off

In caso contrario, il load sui server crescerà in modo esagerato…
Un altro accorgimento da adottare è nelle direttive utilizzate durante il mount. Consigliatissimo l’uso del noatime e localflocks. Una riga tipo del file /etc/fstab può essere:

/dev/sdb1 /var/www/ocfs2  ocfs2 _netdev,localflocks,noatime 0 0

Nel caso di utilizzo di ESX, consiglio infine di modificare il file di configurazione della macchina virtuale (.vmx) aggiungendo la seguente direttiva:

disk.locking = "false"

Page optimized by WP Minify WordPress Plugin