Vous êtes dans un espace restreint en écriture.
(:numbered-sections format=0.A.1.a:)
Nginx [engine x] est un logiciel libre de serveur Web (ou HTTP) ainsi qu'un proxy inverse
Installation
avec les gestionnaires de paquets, non ?
La version actuellement sur selkirk est la 1.11.1 compilée dans /usr/local/nginx-1.11
Compilation depuis les sources
Prendre les sources
- récupération des sources:
wget http://nginx.org/download/nginx-1.11.1.tar.gz
wget http://nginx.org/download/nginx-1.11.1.tar.gz.asc
- récupération des clés publiques depuis http://nginx.org/en/pgp_keys.html
- importation de ces clés:
gpg --import *.key
gpg: key F5806B4D: public key "Andrew Alexeev <andrew@nginx.com>" imported
gpg: key A524C53E: public key "Igor Sysoev <igor@sysoev.ru>" imported
gpg: key 2C172083: public key "Maxim Konovalov <maxim@FreeBSD.org>" imported
gpg: key A1C052F8: public key "Maxim Dounin <mdounin@mdounin.ru>" imported
gpg: key 7BD9BF62: "nginx signing key <signing-key@nginx.com>" imported
gpg: key 7ADB39A8: public key "Sergey Budnevitch <sb@waeme.net>" imported
gpg: Total number processed: 6
gpg: imported: 6 (RSA: 3)
gpg: no ultimately trusted keys found
- vérification des sources:
gpg --verify nginx-1.10.1.tar.gz.asc
gpg: Signature made Tue 31 May 2016 03:58:32 PM CEST using RSA key ID A1C052F8
gpg: Good signature from "Maxim Dounin <mdounin@mdounin.ru>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: B0F4 2533 73F8 F6F5 10D4 2178 520A 9993 A1C0 52F8
- . décomparter les sources
tar xzf nginx-1.11.1.tar.gz
cd nginx-1.11.1
Préparer le système
- creer un compte nginx
useradd -rNM -g www-data nginx -d /usr/local/nginx-1.11
mkdir /usr/local/nginx-1.11
chown nginx:www-data /usr/local/nginx-1.11
- avoir les bonnes librairies:
apt-get install libpcre3-dev zlib1g-dev libssl-dev
Compiler
La compilation se fait avec l'utilisateur *nginx*:
- installation dans le répertoire /usr/local/nginx-1.11
- module par défaut
- Compilation
su nginx
./configure --prefix=/usr/local/nginx-1.11 --with-http_ssl_module --with-http_realip_module
[..]
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1: using OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx-1.11"
nginx binary file: "/usr/local/nginx-1.11/sbin/nginx"
nginx modules path: "/usr/local/nginx-1.11/modules"
nginx configuration prefix: "/usr/local/nginx-1.11/conf"
nginx configuration file: "/usr/local/nginx-1.11/conf/nginx.conf"
nginx pid file: "/usr/local/nginx-1.11/logs/nginx.pid"
nginx error log file: "/usr/local/nginx-1.11/logs/error.log"
nginx http access log file: "/usr/local/nginx-1.11/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
- compilation
Installer
À faire sous `root`:
Control des processus
nginx a un processus «master» qui lance plusieurs «workers».
Il est possible de contrôler l'ensemble de cette arborescence par l’envoi de message au master
avec <commande>:
quit
– extinction propre
reload
– rechargement des fichiers de conf
reopen
– réouverture des fichiers de log
stop
– arrêt immediat (fast shutdown)
Voir [1]
Configuration
De base il faut voir dans le fichier /etc/nginx/nginx.conf. La structure de base est de la forme:
http {
server {
location ... {
[...]
}
}
}
Configuration de base
definitions de base:
server {
server_name myname;
# only IPv4
listen 0.0.0.0:80;
charset utf-8;
}
PHP via FastCGI
processus testé sur une Debian Wheezy
- installation de php5-fpm:
configuration de PHP, dans nginx.conf:
server {
server_name wiki.dalembert.upmc.fr;
[...]
location ~ .php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
Configurations Avancées
HTTPS
- créer ou récupérer un certificat et sa clé privée
- installer dans nginx.conf
server {
listen 443 ssl;
server_name webmail.dalembert.upmc.fr;
ssl_certificate certs/webmail_dalembert_upmc_fr.pem;
ssl_certificate_key certs/webmail_dalembert_upmc_fr.key;
- éventuellement faire une redirection automatique et sustématique des requêtes HTTP vers HTTPD
server {
listen 80;
server_name webmail.dalembert.upmc.fr;
# redirection automatique vers https
location / {
return 301 https://$host$request_uri;
}
}
- éventuellement sécuriser les paramètres HTTPS [2]
server {
listen 443 ssl;
[...]
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate certs/signed_cert_plus_intermediates;
ssl_certificate_key certs/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
# generate with openssl dhparam 2048 > dhparam.pem
ssl_dhparam certs/dhparam.pem;
# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate certs/TrustedRoot.pem;
resolver 134.157.34.1;
Pour tester la configuration, aller sur https://www.ssllabs.com/ssltest/
reverse proxy + cache
La fonction de reverse proxy permet une redirection invisible par le client HTTP de la requête vers une autre URI.
La syntax «de base» pour le reverse est
location / {
proxy_pass http://localhost:8080;
}
La fonction de proxy cache permet de garder un copie des requetes au niveau de nginx.
Cette fonction n'a de sens qu'avec la fonction reverse proxy.
La syntaxe «de base» pour le cache est
http {
proxy_cache_path /data/nginx/cache keys_zone=one:10m;
server {
proxy_cache one;
location / {
proxy_pass http://localhost:8080;
}
}
}
Remarques:
- la commande
proxy_cache_path
doit être dans la section http
- l'activation du cache se fait avec la commande
proxy_cache
dans la section désirée.
reécriture transparente de l'URL
ajout d'un chemin en début
changer /*
en /new/path/*
:
location / {
rewrite ^(.*)$ /new/path/$1;
proxy_pass http://backend;
proxy_redirect off;
}
suppression d'un chemin en début
changer /old/path/*
en /*
:
location /old/path/ {
proxy_pass http://backend/;
}
Notez le /
à la fin de proxy_pass
naxsi
Bugs Connus
413 Request Entity Too Large
C'est une limite liée à l'upload de fichier[3].
Pour augmenter cette limite, il faut ajouter client_max_body_size
dans la section server
:
server {
client_max_body_size 20M;
voir http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
Liens Externes