Changements récents - Rechercher:

Espace Wiki ∂'Alembert
Documentation générale


Espace Guide de survie du SysAdmin
Documentation technique


Espace Guide de survie du Développeur
Pour les développeurs


Espace Institut ∂’Alembert
L'institut


Le Site
À propos du Site
Liste complète des Pages


Aide PmWikiFr

Help PmWiki

GSSA /

nginx

Page mise à jour le 16/09/2016 08:36

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

  1. 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
  2. récupération des clés publiques depuis http://nginx.org/en/pgp_keys.html
  3. 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
  4. 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
  5. . décomparter les sources
    tar xzf nginx-1.11.1.tar.gz
    cd nginx-1.11.1

Préparer le système

  1. 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
  2. avoir les bonnes librairies:
    • PCRE
    • gzip
    • ssl
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
  1. 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"

  2. compilation
    make -j 8

Installer

À faire sous `root`:

make install

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

nginx -s <commande>

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:
apt-get install 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

  1. créer ou récupérer un certificat et sa clé privée
  2. 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;
  3. é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;
      }
    }
  4. é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

À propos du site Licence Creative Commons Cooked with love in 2014-2023 by pcht
Page mise à jour le 16/09/2016 08:36