From 8fc5a0868a211122125361ef394f747215857a61 Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Wed, 28 Feb 2018 01:13:11 +0100 Subject: [PATCH] Suite relecture --- HowtoApache.md | 12 ++++- HowtoNginx.md | 125 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 92 insertions(+), 45 deletions(-) diff --git a/HowtoApache.md b/HowtoApache.md index a345cb8c..e2744054 100644 --- a/HowtoApache.md +++ b/HowtoApache.md @@ -95,7 +95,7 @@ Fichiers de configuration : └── X.conf -> ../sites-available/X.conf ~~~ -La configuration se trouve dans le fichier `/etc/apache2/apache2.conf` qui inclut de nombreux fichiers séparés. +La configuration principale se trouve dans le fichier `/etc/apache2/apache2.conf` qui inclut de nombreux fichiers séparés. Nous activons toujours au minimum les modules suivants : @@ -147,6 +147,16 @@ Pour la [#gestion-des-droits]() on ajoute dans le fichier `/etc/apache2/envvars` umask 007 ~~~ +### Valider la configuration + +Avant de redémarrer le serveur, vérifier que vous n'ayez pas introduit des erreurs de syntaxes dans la configuration : + +~~~ +# apache2ctl configtest +Syntax OK +~~~ + + ## VirtualHost Le terme **VirtualHost** correspond à la séparation de plusieurs sites sur un même serveur HTTP. diff --git a/HowtoNginx.md b/HowtoNginx.md index d136d3e0..c51145b4 100644 --- a/HowtoNginx.md +++ b/HowtoNginx.md @@ -15,8 +15,11 @@ Nous utilisons les paquets Debian officiels (version 1.10.3 sous Stretch et Jess ~~~ # apt install nginx-full -$ /usr/sbin/nginx -v +$ /usr/sbin/nginx -V nginx version: nginx/1.10.3 +built with OpenSSL 1.1.0f 25 May 2017 +TLS SNI support enabled +configure arguments: --with-cc-opt='-g -O2 […] systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server @@ -71,34 +74,15 @@ Fichiers de configuration : │ └── snakeoil.conf ├── uwsgi_params └── win-utf - - /etc/nginx/ - ├── conf.d - ├── fastcgi.conf - ├── fastcgi_params - ├── koi-utf - ├── koi-win - ├── mime.types - ├── nginx.conf - ├── proxy_params - ├── scgi_params - ├── sites-available - │   └── default - ├── sites-enabled - │   └── default -> /etc/nginx/sites-available/default - ├── snippets - │   ├── fastcgi-php.conf - │   └── snakeoil.conf - ├── uwsgi_params - └── win-utf ~~~ -La configuration principale se fait dans le fichier `/etc/nginx/nginx.conf` : +La configuration principale se fait dans le fichier `/etc/nginx/nginx.conf` qui inclut plusieurs fichiers séparés : ~~~ user www-data; worker_processes auto; -pid /var/run/nginx.pid; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; events { use epoll; @@ -106,43 +90,95 @@ events { } http { - keepalive_timeout 15; -[…] + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + include /etc/nginx/mime.types; + default_type application/octet-stream; + ssl_prefer_server_ciphers on; + ssl_dhparam /etc/ssl/dhparam.pem; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + gzip on; + gzip_disable "msie6"; + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} ~~~ -L'un des paramètres à ajuster immédiatement est le *worker_processes*. Les _worker processes_ sont les processus fils lancés par le père (le cœur de nginx), ce sont eux qui font tout le travail, ils ne sont pas multi-threadés : il est recommandé de mettre autant de _worker processes_ que de cores disponibles sur votre serveur ou bien de laisser à « auto ». - -Enfin, on peut déléguer un certain nombre d'options générales dans des fichiers /etc/nginx/conf.d/*.conf +Le fichier `/etc/nginx/conf.d/z-evolinux-defaults.conf` contient nos optimisations basiques : ~~~ -# cat /etc/nginx/conf.d/evolix.conf - -# disable Nginx version server_tokens off; +server_names_hash_max_size 512; +server_names_hash_bucket_size 128; +server_name_in_redirect off; -# GZIP -gzip_types text/css application/x-javascript text/javascript; -gzip_comp_level 5; -# http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl -gzip_buffers 16 8k; +index index.html; +~~~ -# HTTP cache -expires 12h; - -# useful for multi-servers -add_header X-Server $hostname; +Le fichier `/etc/nginx/snippets/ipaddr_whitelist` centralise les adresses IP privilégiées, on peut ainsi utiliser `include /etc/nginx/snippets/ipaddr_whitelist;` à différents endroits dans la configuration de Nginx sans dupliquer ces adresses : ~~~ +allow 192.0.2.42; +~~~ + ### Valider la configuration -Avant de redémarrer le serveur, vérifier que vous n'ayez pas introduit des erreurs de syntaxes dans la configuration +Avant de redémarrer le serveur, vérifier que vous n'ayez pas introduit des erreurs de syntaxes dans la configuration : ~~~ # nginx -t -c /etc/nginx/nginx.conf configuration file /etc/nginx/nginx.conf test is successful ~~~ + +## VirtualHost + +De façon similaire à [Apache](HowtoApache), on peut avoir plusieurs **VirtualHost** (sites sur un même serveur HTTP). + +Voici un exemple de VirtualHost via `/etc/nginx/sites-available/example` : + +~~~ +server { + listen 80; + listen [::]:80; + listen 443 ssl; + listen [::]:443 ssl; + ssl_certificate /etc/ssl/certs/www.example.com.chain.pem; + ssl_certificate_key /etc/ssl/private/www.example.com.key; + + server_name www.example.com example.com; + + root /home/example/www; + + location / { + try_files $uri $uri/ =404; + } + + location /images/ { + root /home/example/images; + } + + location ~ \.css$ { + root /home/example/css; + } + + access_log /home/example/log/access.log; + error_log /home/example/log/error.log; +} +~~~ + +Pour les directives _location_, Nginx va d'abord examiner celles avec des expressions régulières, puis les plus longues +qui seront choisies avant les plus courtes. Dans l'exemple ci-dessous, Nginx vérifiera d'abord si la ressource demandée +se termine par .css puis si elle commence par /images/ puis au final la directive _location/_. + + +## Monitoring + ### Munin Ajouter dans la configuration Nginx : @@ -150,7 +186,6 @@ Ajouter dans la configuration Nginx : ~~~ location /nginx_status_NNNN { stub_status on; - access_log off; allow 127.0.0.1; allow ; deny all; @@ -172,7 +207,8 @@ On peut ainsi activer les plugins _nginx_request_ et _nginx_status_ : # ln -s /usr/share/munin/plugins/nginx_status nginx_status ~~~ -### Rewrite Rule +œ +## Rewrite Rule @@ -457,4 +493,5 @@ more_set_headers 'Server: My Server v42' ### Comment prononcer Nginx ? +