GNU/Linux >> Linux Esercitazione >  >> OpenSuse

Come configurare Apache2 con mod_fcgid e PHP5 su OpenSUSE 11.2

Questo tutorial descrive come installare Apache2 con mod_fcgid e PHP5 su OpenSUSE 11.2. mod_fcgid è un'alternativa compatibile al vecchio mod_fastcgi. Ti consente di eseguire script PHP con i permessi dei loro proprietari invece dell'utente Apache.

1 Nota preliminare

In questo tutorial sto usando un server OpenSUSE 11.2 con il nome host server1.example.com e l'indirizzo IP 192.168.0.100.

Creerò due vhost Apache in questo tutorial, www.example1.com e www.example2.com, per dimostrare l'utilizzo di mod_fcgid.

2 Installazione di Apache2/mod_fcgi/PHP5

Possiamo installare Apache2, mod_fcgid e PHP5 come segue:

yast2 -i apache2 apache2-mod_fcgid php5-fastcgi

Se Apache2 era già installato con PHP5 come modulo Apache, disabilita ora il modulo PHP5:

a2dismod php5

Quindi abilita i moduli suexec e fcgid:

a2enmod suexec
a2enmod fcgid

Quindi creiamo i collegamenti di avvio del sistema per Apache e lo avviamo:

chkconfig --add apache2
/etc/init.d/apache2 start

Quindi apriamo /etc/php5/fastcgi/php.ini...

vi /etc/php5/fastcgi/php.ini

... e decommenta la riga cgi.fix_pathinfo =1:

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]

Quindi riavvia Apache:

/etc/init.d/apache2 restart

3 Creazione di Vhost per www.example1.com e www.example2.com

Ora creerò due vhost, www.example1.com (con la radice del documento /srv/www/web1/web) e www.example2.com (con la radice del documento /srv/www/web2/web). www.example1.com sarà di proprietà dell'utente e del gruppo web1 e www.example2.com dell'utente e del gruppo web2.

Per prima cosa creiamo gli utenti e i gruppi:

groupadd web1
groupadd web2
useradd -s /bin/false -d /srv/www/web1 -m -g web1 web1
useradd -s /bin/false -d /srv/www/web2 -m -g web2 web2
chmod 755 /srv/www/web1
chmod 755 /srv/www/web2

Quindi creiamo le radici del documento e le rendiamo di proprietà degli utenti/gruppi web1 resp. web2:

mkdir -p /srv/www/web1/web
chown web1:web1 /srv/www/web1/web
mkdir -p /srv/www/web2/web
chown web2:web2 /srv/www/web2/web

Eseguiremo PHP usando suExec; La radice del documento di suExec è /srv/www, come mostra il comando seguente:

/usr/sbin/suexec2 -V
server1:~ # /usr/sbin/suexec2 -V
 -D AP_DOC_ROOT="/srv/www"
 -D AP_GID_MIN=96
 -D AP_HTTPD_USER="wwwrun"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=96
 -D AP_USERDIR_SUFFIX="public_html"
server1:~ #

Pertanto non possiamo chiamare direttamente il binario PHP (/usr/bin/php-cgi) perché si trova al di fuori della radice del documento di suExec. Poiché suExec non consente collegamenti simbolici, l'unico modo per risolvere il problema è creare uno script wrapper per ogni sito Web in una sottodirectory di /srv/www; lo script wrapper chiamerà quindi il binario PHP /usr/bin/php-cgi. Lo script wrapper deve essere di proprietà dell'utente e del gruppo di ogni sito web, quindi abbiamo bisogno di uno script wrapper per ogni sito web. Creerò gli script wrapper nelle sottodirectory di /srv/www/php-fcgi-scripts, ad es. /srv/www/php-fcgi-scripts/web1 e /srv/www/php-fcgi-scripts/web2.

mkdir -p /srv/www/php-fcgi-scripts/web1
mkdir -p /srv/www/php-fcgi-scripts/web2
vi /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

La riga PHPRC contiene la directory in cui si trova il file php.ini (cioè, /etc/php5/fastcgi/ si traduce in /etc/php5/fastcgi/php.ini). PHP_FCGI_MAX_REQUESTS è il numero massimo di richieste prima che un processo fcgid venga interrotto e ne venga avviato uno nuovo. PHP_FCGI_CHILDREN definisce il numero di bambini PHP che verranno lanciati.

Gli script php-fcgi-starter devono essere eseguibili e loro (e le directory in cui si trovano) devono essere di proprietà dell'utente e del gruppo del sito web:

chmod 755 /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
chmod 755 /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /srv/www/php-fcgi-scripts/web1
chown -R web2:web2 /srv/www/php-fcgi-scripts/web2

Ora creiamo i vhost Apache per www.example1.com e www.example2.com:

vi /etc/apache2/vhosts.d/www.example1.com.conf
<VirtualHost *>
  ServerName www.example1.com
  ServerAlias example1.com
  ServerAdmin [email protected]
  DocumentRoot /srv/www/web1/web/

  <IfModule mod_fcgid.c>
    SuexecUserGroup web1 web1
    PHP_Fix_Pathinfo_Enable 1
    <Directory /srv/www/web1/web/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /srv/www/php-fcgi-scripts/web1/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off

</VirtualHost>
vi /etc/apache2/vhosts.d/www.example2.com.conf
<VirtualHost *>
  ServerName www.example2.com
  ServerAlias example2.com
  ServerAdmin [email protected]
  DocumentRoot /srv/www/web2/web/

  <IfModule mod_fcgid.c>
    SuexecUserGroup web2 web2
    PHP_Fix_Pathinfo_Enable 1
    <Directory /srv/www/web2/web/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /srv/www/php-fcgi-scripts/web2/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off

</VirtualHost>

Assicurati di compilare i percorsi corretti (e l'utente e il gruppo corretti nelle righe SuexecUserGroup).

Apri /etc/apache2/httpd.conf e aggiungi la riga NameVirtualHost * prima della riga Include /etc/apache2/vhosts.d/*.conf (altrimenti funzionerà solo il primo vhost):

vi /etc/apache2/httpd.conf
[...]
### Virtual server configuration ############################################
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs-2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
NameVirtualHost *

Include /etc/apache2/vhosts.d/*.conf
[...]

Prima di riavviare Apache, cambiamo i permessi dell'eseguibile suExec (altrimenti vedrai il seguente avviso al riavvio di Apache:Attenzione:la direttiva SuexecUserGroup richiede il wrapper SUEXEC.):

chmod 4755 /usr/sbin/suexec2

Riavvia Apache in seguito:

/etc/init.d/apache2 restart

4 Test

Ora creiamo un piccolo file di test PHP, ad esempio nel sito Web www.example1.com...

vi /srv/www/web1/web/info.php
<?php
phpinfo();
?>

... e chiama quel file in un browser (http://www.example1.com/info.php). Se tutto va bene, l'output dovrebbe essere simile a questo e dovresti vedere CGI/FastCGI nella riga dell'API del server:

5 php.ini personalizzati per ogni sito web

Poiché ogni sito web ha il proprio script wrapper php-fcgi-starter, è possibile definire diversi file php.ini per diversi siti web. Per dimostrarlo, copierò il php.ini predefinito (/etc/php5/fastcgi/php.ini) nella directory /srv/www/web2/ e farò in modo che www.example2.com utilizzi php.ini da /srv /www/web2/ directory:

cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini

(Ora puoi modificare /srv/www/web2/php.ini a tuo piacimento.)

Quindi apriamo /srv/www/php-fcgi-scripts/web2/php-fcgi-starter...

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

... e inserisci /srv/www/web2/ nella riga PHPRC:

#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

Riavvia Apache in seguito:

/etc/init.d/apache2 restart

Crea un nuovo phpinfo(); file per www.example2.com...

vi /srv/www/web2/web/info.php
<?php
phpinfo();
?>

... e chiamalo in un browser (http://www.example2.com/info.php). La riga del file di configurazione caricato dovrebbe ora mostrare /srv/www/web2/php.ini:

6 Modifica delle singole impostazioni di configurazione PHP

Invece di passare un file php.ini completamente nuovo al tuo sito web, puoi anche modificare le singole impostazioni di configurazione PHP nello script wrapper php-fcgi-starter (o usare una combinazione di entrambi) aggiungendo l'opzione -d al PHP eseguibile. Ad esempio, se voglio disabilitare magic_quotes_gpc per il sito web www.example2.com, lo farei come segue:

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off

Riavvia Apache in seguito:

/etc/init.d/apache2 restart

Quindi chiama di nuovo lo script info.php in un browser (http://www.example2.com/info.php) e cerca la riga magic_quotes_gpc - ora dovrebbe mostrare Off:

  • mod_fcgid:http://fastcgi.coremail.cn/
  • Apache:http://httpd.apache.org/
  • PHP:http://www.php.net/
  • OpenSUSE:http://www.opensuse.org/

OpenSuse
  1. Come installare Apache2 con PHP5 e MySQL su Fedora 16 (LAMP)

  2. Come installare Apache2 con PHP5 e MySQL su Fedora 15 (LAMP)

  3. Installa Apache2 con PHP5 e MySQL (LAMP) su openSUSE 12.1

  4. Come installare Lighttpd con PHP5 FastCGI e MySQL su openSUSE 12.1

  5. Come installare Nginx con PHP-FPM e MySQL su openSUSE 12.1

Come configurare Apache2 con mod_fcgid e PHP5 su OpenSUSE 11.3

Come configurare Apache2 con mod_fcgid e PHP5 su OpenSUSE 12.2

Come configurare Apache2 con mod_fcgid e PHP5 su OpenSUSE 12.3

Come configurare Mailman con Debian e ISPConfig

Come impostare e configurare una VPN con OpenVPN su Ubuntu 18.04

Come installare e configurare WordPress con Ansible