Nginx-PHP-FPM 8.X

De Hegyd Doc.

Sommaire

Installation et configuration de base

Installer les paquets

Nginx + PHP 8.x

apt-get install apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common php5 libapache2-mod-php5 php-pear php5-cli php5-common php5-curl php5-gd php5-mcrypt php5-mysql php5-suhosin php5-zip php5-mbstring wkhtmltopdf xvfb jpegoptim optipng

PHP-FPM 8.x

Ajouter le dépot dotdeb sur Debian 6

cat >> /etc/apt/sources.list <<EOF


==== PHP 7.4 (sur Debian 8, 9 et 10)====
Réf : https://computingforgeeks.com/how-to-install-latest-php-on-debian/

''Ajouter le dépot SURY seulement sur Debian 8'' ( si ce n'est pas fait )
<pre>
apt-get install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

cat >> /etc/apt/sources.list <<EOF

# PHP DEPOTS SURY ( remplacer Petit_nom_debian par jessie,...buster ) 
deb https://packages.sury.org/php/ [Petit_nom_debian] main
EOF
wget https://packages.sury.org/php/apt.gpg
apt-key add apt.gpg

# en cas d'erreur : gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation
apt install gnupg gnupg1 gnupg2
#puis refaire :
apt-key add apt.gpg

rm apt.gpg

Installer les paquets suivants

apt-get update && apt-get -y install apache2 apache2-mpm-prefork apache2-utils apache2-bin apache2-data php7.4 libapache2-mod-php7.4 php-pear php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-mysql php7.4-mbstring php7.4-xml php7.4-zip zip unzip wkhtmltopdf xvfb jpegoptim optipng

Pout Debian 10 faire seulement :

apt install apache2 php7.4 php-pear php7.4-curl php7.4-gd php7.4-mysql php7.4-mbstring php7.4-xml php7.4-zip zip unzip wkhtmltopdf xvfb jpegoptim optipng

Upgrade de PHP

Installer la nouvelle version de PHP et écraser les packets déjà installés si besoin

Lister la version installée du module Apache a désactiver

ls -la /etc/apache2/mods-available/php*
a2dismod php7.[0,1,2,3,...] ( ancienne version )

Configurer PHP avec la Postconf

Activer le nouveau module Apache et redémarrage du service

a2enmod php7.[0,1,2,3,...] ( nouvelle version )
/etc/init.d/apache2 restart

Configuration de base

  • Directives d’amélioration de la sécurité

-> Pour Debian 7.0 et versions précédentes

sed -i '/^#<\/Directory>/a \
<Directory />\
        AllowOverride None\
        Order Deny,Allow\
        Deny from all\
</Directory>\
<Directory /var/projects/>\
        AllowOverride All\
        Options -Indexes\
        Order Allow,Deny\
        Allow from all\
</Directory>' /etc/apache2/conf.d/security
sed -i 's/^ServerTokens OS/#ServerTokens OS/' /etc/apache2/conf.d/security
sed -i '/^#ServerTokens Full/aServerTokens Prod' /etc/apache2/conf.d/security
sed -i -e 's/^#ServerSignature Off/ServerSignature Off/' -e 's/^ServerSignature On/#ServerSignature On/' /etc/apache2/conf.d/security
sed -i '15,22s/^/#/' /etc/apache2/mods-available/alias.conf

-> Pour Debian 8.0 et supérieures


sed -i '/^#<\/Directory>/a \
<Directory />\
        AllowOverride None\
        Require all denied\
</Directory>\
<Directory /var/projects/>\
        AllowOverride All\
        Options -Indexes\
        Require all granted\
</Directory>' /etc/apache2/conf-available/security.conf
sed -i 's/^ServerTokens OS/#ServerTokens OS/' /etc/apache2/conf-available/security.conf
sed -i '/^#ServerTokens Full/aServerTokens Prod' /etc/apache2/conf-available/security.conf
sed -i -e 's/^#ServerSignature Off/ServerSignature Off/' -e 's/^ServerSignature On/#ServerSignature On/' /etc/apache2/conf-available/security.conf
sed -i '14,21s/^/#/' /etc/apache2/mods-available/alias.conf

  • Configuration globale d'Apache et notamment de son gestionnaire de processus ( Debian < 10 )
cat > /etc/apache2/httpd.conf <<EOF
ServerName $(hostname -f)
ServerAdmin webmaster@hegyd.com

KeepAliveTimeout 3
Timeout 120

Keepalive Off

ServerLimit 250 

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
    StartServers          5   
    MinSpareServers       5   
    MaxSpareServers      10  
    MaxClients          250 
    MaxRequestsPerChild   0   
</IfModule>
EOF
  • Configuration globale d'Apache et notamment de son gestionnaire de processus ( Debian 10 )
cat > /etc/apache2/httpd.conf <<EOF
ServerName $(hostname -f)
ServerAdmin webmaster@hegyd.com

KeepAliveTimeout 3
Timeout 120

Keepalive Off

ServerLimit 250 
EOF
  • Activer le mod status et le configurer (Debian 7)
a2enmod status
sed -i -e '/^\s\+Allow from 127.0.0.1 ::1$/a \
    Allow from 46.18.122.14\
    Allow from 176.31.218.41\
    Allow from 88.161.155.75\
    Allow from 81.252.255.73\
    Allow from 92.154.56.195\
    Allow from 78.238.152.36\
    Allow from 185.132.64.180\
    AuthUserFile /var/projects/common/.htpasswd\
    AuthName "Acces reserve"\
    AuthType Basic\
    require user mike admin \
    Satisfy Any' \
-e 's/^ExtendedStatus On/ExtendedStatus On/' /etc/apache2/mods-available/status.conf
  • Activer le mod status et le configurer (Debian 8 et +)
a2enmod status
sed -i -e '/^\s\+#Require ip 192.0.2.0\/24$/a \
    Allow from 46.18.122.14\
    Allow from 176.31.218.41\
    Allow from 88.161.155.75\
    Allow from 81.252.255.73\
    Allow from 92.154.56.195\
    Allow from 78.238.152.36\
    Allow from 185.132.64.180\
    AuthUserFile /var/projects/common/.htpasswd\
    AuthName "Acces reserve"\
    AuthType Basic\
    require user mike admin \
    Satisfy Any' \
-e 's/^ExtendedStatus On/ExtendedStatus On/' /etc/apache2/mods-available/status.conf
  • Désactiver les modules Apache non nécessaire
a2dismod autoindex
a2enmod rewrite
a2enmod expires
a2enmod php5
/etc/init.d/apache2 restart
  • Autoriser la lecture des logs par le groupe dev
sed -i 's/^\s*create\s\+640\s\+root\s\+adm$/\tcreate 640 root dev/' /etc/logrotate.d/apache2
  • Sur nouvelle installation Debian, charger le fichier httpd.conf (Normalement pas nécessaire sur un upgrade)
sed -i '/^Include ports.conf/aInclude httpd.conf' /etc/apache2/apache2.conf

Upgrade de PHP

Installer la nouvelle version de PHP et écraser les packets déjà installés si besoin

Lister la version installée du module Apache a désactiver

ls -la /etc/apache2/mods-available/php*
a2dismod php7.0

Configurer PHP avec la Postconf

Activer le nouveau module Apache et redémarrage du service

a2enmod php7.3
/etc/init.d/apache2 restart

Dossier de projets et hôte virtuel de base

  • Créer l'arborescence de base des projets
mkdir -p /var/projects/common/default/www
chown -R root:dev /var/projects
chmod -R 2775 /var/projects
  • Créer l'index et le fichiers d'accès par defaut
cat > /var/projects/common/default/www/index.php <<EOF
<?php
/**
 * Fichier d'index par défaut Hegyd
 */
header( 'Location: http://www.hegyd.com/', 301);
EOF
cat > /var/projects/common/default/www/.htaccess <<EOF
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
RewriteRule ^server-status/?$  - [L]
RewriteRule ^.*$ /index.php [L]
EOF
chgrp dev /var/projects/common/default/www/*
chmod 664 /var/projects/common/default/www/*
  • Créer le htpasswd par defaut
cp /usr/local/share/hegyd/sys-common/var/www/.htpasswd /var/projects/common/.htpasswd
chown root:dev /var/projects/common/.htpasswd
chmod 664 /var/projects/common/.htpasswd
  • Hôte virtuel de base

Debian 7.X

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/default.orig.bak
cat > /etc/apache2/sites-available/default <<EOF
<VirtualHost *:80>
        ServerName $(hostname -f)
        DocumentRoot /var/projects/common/default/www
</VirtualHost>
EOF

Debian 8.X

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/default.orig.bak
cat > /etc/apache2/sites-available/000-default.conf <<EOF
<VirtualHost *:80>
        ServerName $(hostname -f)
        DocumentRoot /var/projects/common/default/www
</VirtualHost>
EOF

Configuration derrière un proxy

Il est nécessaire de modifier la configuration de log par defaut des vhosts pour logger l'IP réelle du client (entete X-Forwarded-For). Pour cela, editer le fichier "/etc/apache2/conf.d/other-vhosts-access-log" pour qu'il contienne les configurations suivantes :

LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined env=!forwarded
CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_proxy env=forwarded