compilation-nginx-php-ssl1.0
compilation-nginx-php-ssl1.0
Compilation nginx Debian Stretch
Compilation de la version nginx stable (mainline) et des modules complémentaires lua ,etc…
Vérifier la version nginx “mainline” (nginx 1.13.5 au 05 Sep 2017)
)
Il faut modifier la constante ngxversion
du fichier bash nginx-compil
ATTENTION!!!,Problème de compilation nginx avec Openssl 1.1
Il faut compiler avec la version 1.0 qui est toujours d’actualité.
Voir le site https://www.openssl.org/source/ ,Version OpenSSL_1_0_2l du 25 mai 2017
Passage en mode super utilisateur
sudo -s
Bash de compilation
Fichier bash pouvant être exécuté ,copier le contenu ci dessous dans une fenêtre terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
cat > nginx-compil << EOF
#!/bin/bash
#
#version nginx http://nginx.org/en/download.html
ngxversion="nginx-1.13.5"
#Debian Stretch ,compilation Nginx+Lua
#répertoire de compilation
mkdir -p /usr/src/nginx-custom && cd /usr/src/nginx-custom
#logiciels pour compilation
apt install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip curl libcurl4-openssl-dev libossp-uuid-dev libssl-dev libxslt-dev libgd-dev libgeoip-dev libperl-dev libpam0g-dev libbz2-dev tar unzip curl git -y
# installation luajit ,dépendances Lua5.1 et lua-cjson
apt install luajit lua5.1 liblua5.1-0 liblua5.1-0-dev lua-cjson -y
#
cd /usr/src/nginx-custom
wget http://nginx.org/download/$ngxversion.tar.gz?_ga=1.52322729.1622108673.1451984988 -O $ngxversion.tar.gz
tar xvf $ngxversion.tar.gz
mv $ngxversion nginx-mainline
rm $ngxversion.tar.gz
#Création dossier modules
mkdir -p /usr/src/nginx-custom/nginx-mainline/modules
#Modules externes : https://www.nginx.com/resources/wiki/modules/
cd /usr/src/nginx-custom/nginx-mainline/modules/
#Clonage des modules externes avant compilation
# headers-more-nginx-module
git clone https://github.com/openresty/headers-more-nginx-module
# ngx_http_auth_pam_module
git clone https://github.com/stogh/ngx_http_auth_pam_module
#ngx_cache_purge
git clone https://github.com/FRiCKLE/ngx_cache_purge
#ngx_devel_kit
git clone https://github.com/simpl/ngx_devel_kit
#echo-nginx-module
git clone https://github.com/openresty/echo-nginx-module
#ngx-fancyindex
git clone https://github.com/aperezdc/ngx-fancyindex
# modification fancyindex pour avoir la ligne complète
#nginx-push-stream-module
git clone https://github.com/wandenberg/nginx-push-stream-module
#lua-nginx-module
git clone https://github.com/openresty/lua-nginx-module.git
#nginx-upload-progress-module
git clone https://github.com/masterzen/nginx-upload-progress-module
#ngx_http_substitutions_filter_module
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
#Chiffrement déchiffrement pour les variables nginx
git clone https://github.com/openresty/encrypted-session-nginx-module.git
#Capacité d'échappement,“déséchappement”,encodage et décodage hexa,MD5,SHA1,Base32,Base64 ,etc…
git clone https://github.com/openresty/set-misc-nginx-module
#nginx-upstream-fair (problème de compilation)
#--add-module=/usr/src/nginx-custom/nginx-mainline/modules/nginx-upstream-fair
#git clone https://github.com/gnosek/nginx-upstream-fair
#SSL 1.0
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2l.tar.gz
tar xvf OpenSSL_1_0_2l.tar.gz
#
cd /usr/src/nginx-custom/nginx-mainline
#Configuration , compilation et installation nginx
./configure \
--with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' \
--with-ld-opt=-Wl,-z,relro \
--prefix=/usr/share/nginx \
--conf-path=/etc/nginx/nginx.conf \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--lock-path=/var/lock/nginx.lock \
--pid-path=/run/nginx.pid \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-debug \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_auth_request_module \
--with-http_addition_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_geoip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_mp4_module \
--with-http_perl_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-mail \
--with-mail_ssl_module \
--with-openssl=/usr/src/nginx-custom/nginx-mainline/modules/openssl-OpenSSL_1_0_2l \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/headers-more-nginx-module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/ngx_http_auth_pam_module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/ngx_cache_purge \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/ngx_devel_kit \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/echo-nginx-module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/ngx-fancyindex \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/nginx-push-stream-module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/lua-nginx-module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/nginx-upload-progress-module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/ngx_http_substitutions_filter_module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/encrypted-session-nginx-module \
--add-module=/usr/src/nginx-custom/nginx-mainline/modules/set-misc-nginx-module
#compilation
make
#installation
make install
#Copier le binaire pour le PATH
cp /usr/share/nginx/sbin/nginx /usr/sbin/
#Effacement compilation
make clean
#Dossier temporaire
mkdir -p /var/lib/nginx
#Dossier config
mkdir -p /etc/nginx/conf.d/
#dossier vhost
mkdir -p /var/www
EOF
Le rendre exécutable
chmod +x nginx-compil
Exécution
./nginx-compil
Vérification
nginx -t
1
2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Créer le script d’initialisation (service)
fichier /etc/init.d/nginx
1
2
touch /etc/init.d/nginx
chmod u+x /etc/init.d/nginx
Le fichier d’intialisation
nano /etc/init.d/nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#!/bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
# Include nginx defaults if available
if [ -r /etc/default/nginx ]; then
. /etc/default/nginx
fi
STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}"
test -x $DAEMON || exit 0
. /lib/init/vars.sh
. /lib/lsb/init-functions
# Try to extract nginx pidfile
PID=$(cat /etc/nginx/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)
if [ -z "$PID" ]
then
PID=/run/nginx.pid
fi
# Check if the ULIMIT is set in /etc/default/nginx
if [ -n "$ULIMIT" ]; then
# Set the ulimits
ulimit $ULIMIT
fi
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- \
$DAEMON_OPTS 2>/dev/null \
|| return 2
}
test_nginx_config() {
$DAEMON -t $DAEMON_OPTS >/dev/null 2>&1
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME
RETVAL="$?"
sleep 1
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --name $NAME
return 0
}
#
# Rotate log files
#
do_rotate() {
start-stop-daemon --stop --signal USR1 --quiet --pidfile $PID --name $NAME
return 0
}
#
# Online upgrade nginx executable
#
# "Upgrading Executable on the Fly"
# http://nginx.org/en/docs/control.html
#
do_upgrade() {
# Return
# 0 if nginx has been successfully upgraded
# 1 if nginx is not running
# 2 if the pid files were not created on time
# 3 if the old master could not be killed
if start-stop-daemon --stop --signal USR2 --quiet --pidfile $PID --name $NAME; then
# Wait for both old and new master to write their pid file
while [ ! -s "${PID}.oldbin" ] || [ ! -s "${PID}" ]; do
cnt=`expr $cnt + 1`
if [ $cnt -gt 10 ]; then
return 2
fi
sleep 1
done
# Everything is ready, gracefully stop the old master
if start-stop-daemon --stop --signal QUIT --quiet --pidfile "${PID}.oldbin" --name $NAME; then
return 0
else
return 3
fi
else
return 1
fi
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
# Check configuration before stopping nginx
if ! test_nginx_config; then
log_end_msg 1 # Configuration error
exit 0
fi
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC configuration" "$NAME"
# Check configuration before reload nginx
#
# This is not entirely correct since the on-disk nginx binary
# may differ from the in-memory one, but that's not common.
# We prefer to check the configuration and return an error
# to the administrator.
if ! test_nginx_config; then
log_end_msg 1 # Configuration error
exit 0
fi
do_reload
log_end_msg $?
;;
configtest|testconfig)
log_daemon_msg "Testing $DESC configuration"
test_nginx_config
log_end_msg $?
;;
status)
status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $?
;;
upgrade)
log_daemon_msg "Upgrading binary" "$NAME"
do_upgrade
log_end_msg 0
;;
rotate)
log_daemon_msg "Re-opening $DESC log files" "$NAME"
do_rotate
log_end_msg $?
;;
*)
echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}" >&2
exit 3
;;
esac
:
Fichier de configuration nginx
Effacement puis création
1
2
rm /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf
Copier le contenu ci dessous dans une fenêtre terminal pour créer le fichier /etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
cat > /etc/nginx/nginx.conf << EOF
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
}
EOF
Vérification
nginx -t
Création systemd nginx.service
nginx est compilé et installé , binaire sur /usr/sbin/nginx
Création du fichier /etc/systemd/system/nginx.service
Copier le contenu ci dessous dans une fenêtre terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat > /etc/systemd/system/nginx.service << EOF
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
EOF
Réinitialiser
systemctl daemon-reload
Lancer le service
systemctl start nginx
Vérifier le “status”
systemctl status nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/etc/systemd/system/nginx.service; disabled; vendor preset:
Active: active (running) since Tue 2017-09-12 18:13:56 CEST; 16s ago
Process: 5680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (co
Process: 5677 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proces
Main PID: 5681 (nginx)
Tasks: 5 (limit: 4915)
CGroup: /system.slice/nginx.service
├─5681 nginx: master process /usr/sbin/nginx -g daemon on; master_p
├─5682 nginx: worker process
├─5683 nginx: worker process
├─5685 nginx: worker process
└─5686 nginx: worker process
sept. 12 18:13:56 cinay.pw systemd[1]: Starting A high performance web server
sept. 12 18:13:56 cinay.pw systemd[1]: Started A high performance web server a
web default.conf et index.html
Configuration vhost
Contenu fichier /etc/nginx/conf.d/default.conf
1
2
3
4
5
6
7
cat > /etc/nginx/conf.d/default.conf << EOF
server {
listen 80;
listen [::]:80;
root /var/www/ ;
}
EOF
Création fichier html
Contenu fichier /var/www/index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
cat > /var/www/index.html << EOF
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx on Debian!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx on Debian!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working on Debian. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a></p>
<p>
Please use the <tt>reportbug</tt> tool to report bugs in the
nginx package with Debian. However, check <a
href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?ordering=normal;archive=0;src=nginx;repeatmerged=0">existing
bug reports</a> before reporting a new bug.
</p>
<p><em>Thank you for using debian and nginx.</em></p>
</body>
</html>
EOF
Relancer le serveur
systemctl restart nginx
Vous vérifier la page html sur le lien http://adresse_IP ,ex: http://192.168.0.43 (remplacer par votre IP ou domaine http://cinay.pw)
Après ces tests et vérifications ,valider nginx pour un démarrage auto
systemctl enable nginx
PHP5 , PHP7.0 et PHP7.1
PHP5
Installation
1
sudo apt-get install php5-fpm
PHP7.0 (debian 9)
PHP7.0 est dans les dépôts stretch
1
sudo apt install php7.0 php7.0-fpm php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-tidy php7.0-intl php7.0-imagick php7.0-xml php7.0-mbstring php7.0-zip -y
Le fichier de configuration
$ php -i | grep "Loaded Configuration File"
Loaded Configuration File => /etc/php/7.0/cli/php.ini
PHP7.0/i686 via dotdeb (debian 7-8)
PHP 7 ne sera pas disponible dans les dépôts de Debian avant Debian 9, puisqu’elle n’accepte que les correctifs pour la version en cours.
A - Ajout du dépot Dotdeb
Ajout liste
1
2
3
4
sudo -s
echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/php7.list
wget --no-check-certificate -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -
apt update && apt -yy upgrade
B - Si PHP 5 est installé , il faut le supprimer
1
2
systemctl stop php5-fpm
apt-get autoremove --purge php5*
C - Installation de PHP7.0/i686
avec quelques dépendances (valables pour installer nextcloud)
1
apt install php7.0 php7.0-fpm php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-tidy php7.0-intl php7.0-imagick php7.0-xml php7.0-mbstring php7.0-zip
On peut vérifier la version installée avec php -v
PHP7.1
Vous pouvez commencer par désinstaller PHP 7.0 en utilisant la commande suivante
1
apt-get purge 'php7*'
A - Configuration du dépot
Ondřej Surý met à disposition un dépôt permettant de télécharger et d’installer facilement cette nouvelle version de php. Pour cela il vous suffit de rentrer les commandes suivantes
1
2
3
4
apt install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php7.list
apt update
B - Installer PHP 7.1/NGinx
une commande pour installer PHP 7.1 avec les éléments nécessaires à l’installation de nextcloud
1
apt install php7.1 php7.1-fpm php7.1-mysql php7.1-curl php7.1-json php7.1-gd php7.1-mcrypt php7.1-tidy php7.1-intl php7.1-imagick php7.1-xml php7.1-mbstring php7.1-zip
une commande pour installer PHP 7.1 ainsi que quelques dépendances qui pourraient vous être utiles
1
apt install --no-install-recommends php7.1 php7.1-fpm php7.1-mysql php7.1-curl php7.1-json php7.1-gd php7.1-mcrypt php7.1-msgpack php7.1-memcached php7.1-intl php7.1-sqlite3 php7.1-gmp php7.1-geoip php7.1-mbstring php7.1-redis php7.1-xml php7.1-zip
N’oubliez pas de modifier la configuration de vos sites afin de mettre à jour le socket d’écoute de PHP-FPM
1
/run/php/php7.1-fpm.sock
Configuration et test php 5 ou 7
Choisir l’une des 2 configurations suivantes pour créer le fichier test PHP, fonction du mode d’installation de nginx
1. NGINX installé AVEC DEB (pas développé dans ce tuto)
1
2
3
sudo -s
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
nano /etc/nginx/sites-enabled/default
2. NGINX compilé
1
2
3
sudo -s
echo "<?php phpinfo(); ?>" > /var/www/info.php
nano /etc/nginx/conf.d/default.conf
Configurer Nginx pour rediriger les fichiers PHP vers fpm.
Ajouter les lignes suivantes dans la section “server” ,avant le “}” final
1
2
3
4
5
6
7
8
9
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# fastcgi_pass unix:/var/run/php5-fpm.sock; # PHP5
fastcgi_pass unix:/run/php/php7.0-fpm.sock; # PHP7.0
# fastcgi_pass unix:/run/php/php7.1-fpm.sock # PHP7.1
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
Redémarrer php fpm suivant votre version installée
1
2
3
systemctl restart php5-fpm #PHP5
systemctl restart php7.0-fpm #PHP7.0
systemctl restart php7.1-fpm #PHP7.1
Recharger Nginx
1
systemctl restart nginx
Test sur le http://192.168.0.43/info.php (remplacer par votre IP ou domaine http://cinay.pw/info.php)