GNU/Linux >> Tutoriels Linux >  >> OpenSuse

Comment configurer Apache2 avec mod_fcgid et PHP5 sur OpenSUSE 12.2

Ce tutoriel décrit comment vous pouvez installer Apache2 avec mod_fcgid et PHP5 sur OpenSUSE 12.2. mod_fcgid est une alternative compatible à l'ancien mod_fastcgi. Il vous permet d'exécuter des scripts PHP avec les autorisations de leurs propriétaires au lieu de l'utilisateur Apache.

1 Remarque préliminaire

J'utilise un serveur OpenSUSE 12.2 dans ce tutoriel avec le nom d'hôte server1.example.com et l'adresse IP 192.168.0.100.

Je vais créer deux vhosts Apache dans ce tutoriel, www.example1.com et www.example2.com, pour démontrer l'utilisation de mod_fcgid.

2 Installation d'Apache2/mod_fcgi/PHP5

Nous pouvons installer Apache2, mod_fcgid et PHP5 comme suit :

zypper install apache2 apache2-mod_fcgid php5-fastcgi

Si Apache2 était déjà installé avec PHP5 en tant que module Apache, désactivez le module PHP5 maintenant :

a2dismod php5

Activez ensuite les modules suexec et fcgid :

a2enmod suexec
a2enmod fcgid

Ensuite, nous créons les liens de démarrage du système pour Apache et le démarrons :

systemctl enable apache2.service
systemctl start apache2.service

Ensuite, nous ouvrons /etc/php5/fastcgi/php.ini...

vi /etc/php5/fastcgi/php.ini

... et décommentez la ligne cgi.fix_pathinfo=1 :

[...] ; cgi.fix_pathinfo fournit un support *réel* PATH_INFO/PATH_TRANSLATED pour CGI. PHP ; le comportement précédent était de définir PATH_TRANSLATED sur SCRIPT_FILENAME, et de ne pas grok ; ce que PATH_INFO est. Pour plus d'informations sur PATH_INFO, consultez les spécifications cgi. Paramètre; ceci à 1 obligera PHP CGI à fixer ses chemins pour se conformer à la spécification. Un paramètre; de zéro oblige PHP à se comporter comme avant. La valeur par défaut est 1. Vous devez corriger vos scripts ; pour utiliser SCRIPT_FILENAME plutôt que PATH_TRANSLATED.; http://php.net/cgi.fix-pathinfocgi.fix_pathinfo=1[...]

Ouvrez /etc/apache2/conf.d/mod_fcgid.conf...

vi /etc/apache2/conf.d/mod_fcgid.conf

... et ajoutez la ligne PHP_Fix_Pathinfo_Enable 1 (cette ligne ne doit pas entrer dans une section car vous obtiendrez alors cette erreur :PHP_Fix_Pathinfo_Enable ne peut pas se produire dans la section ) :

[...]PHP_Fix_Pathinfo_Enable 1

Redémarrez ensuite Apache :

systemctl redémarre apache2.service

3 Création de Vhosts pour www.example1.com et www.example2.com

Je vais maintenant créer deux vhosts, www.example1.com (avec la racine du document /srv/www/web1/web) et www.example2.com (avec la racine du document /srv/www/web2/web). www.example1.com appartiendra à l'utilisateur et au groupe web1, et www.example2.com à l'utilisateur et au groupe web2.

Nous créons d'abord les utilisateurs et les groupes :

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

Ensuite, nous créons les racines du document et les faisons appartenir aux utilisateurs/groupes 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

Nous allons exécuter PHP en utilisant suExec ; La racine du document de suExec est /srv/www, comme le montre la commande suivante :

/usr/sbin/suexec2 -V
serveur1 :~ # /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"
serveur1 :~ #

Par conséquent, nous ne pouvons pas appeler directement le binaire PHP (/usr/bin/php-cgi) car il se trouve en dehors de la racine du document de suExec. Comme suExec n'autorise pas les liens symboliques, la seule façon de résoudre le problème est de créer un script wrapper pour chaque site Web dans un sous-répertoire de /srv/www; le script wrapper appellera alors le binaire PHP /usr/bin/php-cgi. Le script wrapper doit appartenir à l'utilisateur et au groupe de chaque site Web, nous avons donc besoin d'un script wrapper pour chaque site Web. Je vais créer les scripts wrapper dans les sous-répertoires de /srv/www/php-fcgi-scripts, par ex. /srv/www/php-fcgi-scripts/web1 et /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/shPHPRC=/etc/php5/fastcgi/export PHPRCexport PHP_FCGI_MAX_REQUESTS=5000export PHP_FCGI_CHILDREN=8exec /usr/bin/php-cgi 
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/shPHPRC=/etc/php5/fastcgi/export PHPRCexport PHP_FCGI_MAX_REQUESTS=5000export PHP_FCGI_CHILDREN=8exec /usr/bin/php-cgi 

La ligne PHPRC contient le répertoire où se trouve le fichier php.ini (c'est-à-dire que /etc/php5/fastcgi/ se traduit par /etc/php5/fastcgi/php.ini). PHP_FCGI_MAX_REQUESTS est le nombre maximum de requêtes avant qu'un processus fcgid soit arrêté et qu'un nouveau soit lancé. PHP_FCGI_CHILDREN définit le nombre d'enfants PHP qui seront lancés.

Les scripts php-fcgi-starter doivent être exécutables, et ils (ainsi que les répertoires dans lesquels ils se trouvent) doivent appartenir à l'utilisateur et au groupe du site 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

Nous créons maintenant les vhosts Apache pour www.example1.com et www.example2.com :

vi /etc/apache2/vhosts.d/www.example1.com.conf
 ServerName www.example1.com ServerAlias ​​example1.com ServerAdmin [email protected] DocumentRoot /srv/www/web1/web/  SuexecUserGroup web1 web1  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   # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combiné ServerSignature Off 
vi /etc/apache2/vhosts.d/www.example2.com.conf
 ServerName www.example2.com ServerAlias ​​example2.com ServerAdmin [email protected] DocumentRoot /srv/www/web2/web/  SuexecUserGroup web2 web2  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   # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combiné ServerSignature Off 

Assurez-vous de remplir les bons chemins (et le bon utilisateur et groupe dans les lignes SuexecUserGroup).

Ouvrez /etc/apache2/httpd.conf et ajoutez la ligne NameVirtualHost * avant la ligne Include /etc/apache2/vhosts.d/*.conf (sinon seul le premier vhost fonctionnera) :

vi /etc/apache2/httpd.conf
[...]### Configuration du serveur virtuel #################### ########################## VirtualHost :si vous souhaitez conserver plusieurs domaines/noms d'hôte sur votre machine, vous pouvez configurer des conteneurs VirtualHost pour eux. La plupart des configurations# n'utilisent que des hôtes virtuels basés sur le nom afin que le serveur n'ait pas à se soucier des # adresses IP. Ceci est indiqué par les astérisques dans les directives ci-dessous.## Veuillez consulter la documentation sur# # pour plus de détails avant d'essayer de configurer des hôtes virtuels .## Vous pouvez utiliser l'option de ligne de commande '-S' pour vérifier la configuration de votre hôte virtuel#.#NameVirtualHost *:80Include /etc/apache2/vhosts.d/*.conf[...]

Avant de redémarrer Apache, nous modifions les autorisations de l'exécutable suExec (sinon vous verrez l'avertissement suivant lorsque vous redémarrez Apache :Avertissement :la directive SuexecUserGroup nécessite un wrapper SUEXEC.) :

chmod 4755 /usr/sbin/suexec2

Redémarrez ensuite Apache :

systemctl redémarre apache2.service

4 Tests

Maintenant, nous créons un petit fichier de test PHP, par exemple dans le site Web www.example1.com...

vi /srv/www/web1/web/info.php

... et appelez ce fichier dans un navigateur (http://www.example1.com/info.php). Si tout se passe bien, la sortie devrait ressembler à ceci, et vous devriez voir CGI/FastCGI dans la ligne de l'API du serveur :

5 php.ini personnalisés pour chaque site Web

Étant donné que chaque site Web possède son propre script wrapper php-fcgi-starter, il est possible de définir différents fichiers php.ini pour différents sites Web. Pour le démontrer, je vais copier le php.ini par défaut (/etc/php5/fastcgi/php.ini) dans le répertoire /srv/www/web2/ et faire en sorte que www.example2.com utilise le php.ini du /srv Répertoire /www/web2/ :

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

(Vous pouvez maintenant modifier /srv/www/web2/php.ini à votre guise.)

Ensuite, nous ouvrons /srv/www/php-fcgi-scripts/web2/php-fcgi-starter...

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

... et mettez /srv/www/web2/ dans la ligne PHPRC :

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

Redémarrez ensuite Apache :

systemctl redémarre apache2.service

Créez un nouveau phpinfo(); fichier pour www.example2.com...

vi /srv/www/web2/web/info.php

... et appelez-le dans un navigateur (http://www.example2.com/info.php). La ligne Fichier de configuration chargé doit maintenant afficher /srv/www/web2/php.ini :

6 Modification des paramètres de configuration PHP unique

Au lieu de transmettre un tout nouveau fichier php.ini à votre site Web, vous pouvez également modifier les paramètres de configuration PHP dans le script wrapper php-fcgi-starter (ou utiliser une combinaison des deux) en ajoutant le commutateur -d au PHP. exécutable. Par exemple, si je veux désactiver magic_quotes_gpc pour le site Web www.example2.com, je le ferais comme suit :

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

Redémarrez ensuite Apache :

systemctl redémarre apache2.service

Ensuite, appelez à nouveau le script info.php dans un navigateur (http://www.example2.com/info.php) et recherchez la ligne magic_quotes_gpc - elle devrait afficher Off maintenant :

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

OpenSuse
  1. Comment installer Apache2 avec PHP5 et MySQL sur Fedora 16 (LAMP)

  2. Comment installer Apache2 avec PHP5 et MySQL sur Fedora 15 (LAMP)

  3. Comment installer Lighttpd avec PHP5 FastCGI et MySQL sur openSUSE 12.1

  4. Comment installer Nginx avec PHP-FPM et MySQL sur openSUSE 12.1

  5. Comment configurer un serveur SFTP sur le serveur OpenSUSE Leap 15.3

Comment configurer Apache2 avec mod_fcgid et PHP5 sur OpenSUSE 11.2

Comment configurer Apache2 avec mod_fcgid et PHP5 sur OpenSUSE 11.3

Comment configurer Apache2 avec mod_fcgid et PHP5 sur OpenSUSE 12.3

Comment configurer Mailman avec Debian et ISPConfig

Comment installer et configurer un VPN avec OpenVPN sur Ubuntu 18.04

Comment installer et configurer WordPress avec Ansible