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
