Apache 2.x su sistemi Unix

Questa sezione contiene appunti e suggerimenti specifici per l'installazione di Apache 2.x con PHP su sistemi Unix.

Avviso

L'utilizzo di un threaded MPM non è raccomandato in produzione con Apache 2. Usare il prefork MPM, che è il MPM di default su Apache 2.0 e 2.2. Per informazioni, leggere la voce correlata delle FAQ sull'uso di Apache2 con un threaded MPM

La » documentazione di Apache è la principale fonte di informazioni per il server Apache 2.x. Più informazioni riguardanti l'installazione di Apache possono essere trovate nella documentazione ufficiale.

La versione più recente di Apache HTTP Server può essere ottenuta dal » sito di download di Apache, e una versione di PHP compatibile dai siti menzionati in precedenza. Questa guida rapida fornisce solo le informazioni base per iniziare ad utilizzare Apache 2.x e PHP. Per maggiori informazioni si legga la » documentazione di Apache. I numeri di versione sono omessi per assicurare che le istruzioni non siano incorrette. Nell'esempio sotto, 'NN' dovrebbe essere sostituito con la specifica versione di Apache che si sta utilizzando.

Ci sono attualmente 2 versioni di Apache 2.x - la 2.4 e la 2.2. Ci possono essere varie ragioni per scegliere una o l'altra versione, ma la 2.4 è attualmente l'ultima e quella raccomandata, se quella opzione è disponibile. In ogni caso le istruzioni qui presentate sono utilizzabili sia con la versione 2.4 che con la 2.2. Da notare che Apache httpd 2.2 è ufficialmente End of Life, e nessun nuovo sviluppo o patch sarà effettuato.

  1. Scarica Apache HTTP Server da uno dei collegamenti menzionati precedentemente ed estrailo:

    tar -xzf httpd-2.x.NN.tar.gz
    
  2. Allo stesso modo, scarica ed estrai il codice sorgente di PHP:

    tar -xzf php-NN.tar.gz
    
  3. Compila ed installa Apache. Consulta la documentazione di Apache per maggiori dettagli.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Ora Apache2.x.NN è disponibile in /usr/local/apache2, configurato con il supporto per il caricamento di moduli e il MPM prefork standard. Per testare l'installazione usa la normale procedura per eseguire il server Apache, es.:

    /usr/local/apache2/bin/apachectl start
    
    e termina l'esecuzione del server per proseguire con la configurazione di PHP:
    /usr/local/apache2/bin/apachectl stop
    

  5. Ora, configura e compila PHP. In questa fase è possibile personalizzare PHP con varie opzioni, come le estensioni da abilitare. Esegui ./configure --help per una lista completa delle possibili opzioni. Nell'esempio seguente PHP sarà configurato per supportare Apache 2 e MySQL.

    Se si compila Apache dal codice sorgente, come descritto in precedenza, il percorso per apxs sarà uguale a quello dell'esempio seguente, ma se Apache viene installato in qualche altro modo, si dovrà eventualmente correggere il percorso di apxs. Da ricordare che alcune distribuzioni potrebbero rinominare apxs in apxs2.

    cd ../php-NN
    ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
    make
    make install
    

    Per riconfigurare le opzioni dopo l'installazione, è necessario eseguire nuovamente i passaggi di configurazione, compilazione ed installazione. Sarà poi necessario riavviare Apache per utilizzare il nuovo modulo. Non è necessario compilare Apache nuovamente.

    Nota che se non indicato diversamente, 'make install' installerà anche PEAR, strumenti di PHP come phpize, PHP CLI ed altri.

  6. Configurazione di php.ini

    cp php.ini-development /usr/local/lib/php.ini
    

    È possibile modificare il file .ini per impostare le opzioni di PHP. Se si desidera spostare il file php.ini in un'altra poizione, utilizzare l'opzione --with-config-file-path=/some/path al punto 5.

    Nel caso venga utilizzato il file php.ini-production, assicurarsi di leggere la lista dei cambiamenti al suo interno, perché modificano il comportamento di PHP.

  7. Modifica il file httpd.conf per caricare il modulo PHP. Il percorso nella parte destra della dichiarazione di LoadModule deve puntare al percorso del modulo PHP sul proprio sistema. Il precedente comando make install potrebbe averlo già aggiunto, ma si verifichi per sicurezza.

    Per PHP 8:

    LoadModule php_module modules/libphp.so

    Per PHP 7:

    LoadModule php7_module modules/libphp7.so
  8. Configurare Apache per analizzare certe estensioni di file con PHP. Per esempio, facciamo in modo che Apache analizzi i file .php con PHP. Invece di utilizzare solamente la direttiva AddType, si vuole evitare di caricare e creare file potenzialmente pericolosi come exploit.php.jpg ed evitarne l'esecuzione con PHP. Usando il seguente esempio, è possibile eseguire file con qualsiasi estensione con PHP semplicemente aggiungendola alla direttiva. Di seguito verrà aggiunta l'estensione .php come esempio.

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

    O se si vuole far eseguire a PHP solamente i file con estensione .php, .php2, .php3, .php4, .php5, .php6, e .phtml, ma nient'altro, useremmo questo:

    <FilesMatch "\.ph(p[2-6]?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>

    E per permettere ai file .phps di essere gestiti dal filtro per sorgenti php, ed utilizzare la colorazione della sintassi per il codice sorgente, utilizzare:

    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>

    mod_rewrite può essere utilizzato per permettere che ogni file .php disponga della colorazione della sintassi per il codice sorgente, evitando di rinominare o copiare il file in un file .phps:

    RewriteEngine On
    RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]

    Il filtro per sorgenti php non dovrebbe essere abilitato in sistemi in produzione, dove potrebbe esporre informazioni confidenziali o sensibili incorporate nel codice sorgente.

  9. Utilizzare la normale procedura per avviare il server Apache, es. :

    /usr/local/apache2/bin/apachectl start
    

    o

    service httpd restart
    

Seguendo i passi sopra indicati si avrà un server web Apache2 con il supporto per PHP come modulo SAPI. Ovviamente ci sono molte altre opzioni configurabili per Apache e per PHP. Per altre informazioni digita ./configure --help nella cartella corrispondente.

Apache può essere compilato per utilizzare il multithread selezionando il worker MPM, invece del prefork MPM standard, quando Apache viene compilato. Questo è possibile aggiungendo la seguente opzione all'argomento passato al comando ./configure, nel passo 3 precedente:

--with-mpm=worker

Questa modifica non dovrebbe essere fatta senza essere consapevoli delle conseguenze di questa decisione e senza avere almeno una discreta comprensione delle sue implicazioni. La documentazione di Apache riguardante » MPM-Modules tratta l'argomento MPM in modo molto più dettagliato.

Nota:

Le Apache MultiViews FAQ trattano l'utilizzo delle multiviews con PHP.

Nota:

Per compilare una versione multithread di Apache, il sistema di destinazione deve supportare i thread. In questo caso, PHP può anche essere compilato con Zend Thread Safety (ZTS). Con questa configurazione, non tutte le estensioni saranno disponibili. La configurazione consigliata è quella di compilare Apache usando l'MPM-Module prefork come di default.

add a note

User Contributed Notes 2 notes

up
16
nmmm at nmmm dot nu
16 years ago
When I upgrade to apache 2.2, this:

AddType application/x-httpd-php .php5
AddType application/x-httpd-php .php42
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtm
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .asp

...does not worked for me, so I did this:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler application/x-httpd-php
</FilesMatch>

Another interesting point with Apache 2.2 is following.
Let suppose we installed PHP as module. But for some directory, we need to use PHP as CGI (probably because of custom configuration). This can be done using:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action  application/x-httpd-php-custom  /cgi-bin/php-huge

Note type must be different than "application/x-httpd-php" and also you need to deactivate the handler on sertain extention. You can do mixed configuration:

<FilesMatch "\.(php)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action  application/x-httpd-php-custom  /cgi-bin/php-huge

in such case files like *.php5 and so on will be parsed via module, but *.php will go to php-huge executable.
up
7
Morning Star
3 years ago
I had just installed php8.1.12 on a machine used for writing C code. 

Below are some libraries that I needed to download on a debian-based OS. 

apt-get install libpcre3 libpcre3-dev 
apt-get install apache2-dev
apt-get install libxml2-dev
apt-get install libsqlite3-dev

These were the missing packages that I required. 
If you get an error regarding a missing package or library, for example when I needed sqlite3, run the command: 

apt search sqlite3

And you'll be able to see if there's any dev or lib packages. 

The apache2 instructions worked flawlessly at the time of php8.1.12; and in order to get certain requirements for an application, I had to run the php configure file like so:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql --with-mysqli --with-zip --enable-gd

The extra flags allowed me to use both types of mysql, allowed me to utilize PHP zip archiving, and allowed me to use Gnatt stuff.
To Top