Nginx-PHP-FPM 8.X

De Hegyd Doc.

Version du 17 juillet 2023 à 14:30 par Pentasonic (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Sommaire

[modifier] Installation et configuration de base

[modifier] Installer les paquets

[modifier] 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

[modifier] 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

[modifier] 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

[modifier] Activer le nouveau module Apache et redémarrage du service

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

[modifier] 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

[modifier] 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

[modifier] 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

[modifier] 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