informatique:serveurs:installation-logiciels:nginx

Installation de Nginx

  • Passer en admin : su - admin
  • Se rendre dans le dossier des scripts : cd scripts/nginx/
  • Lancer le script : sh nginx_1.6.sh
  • Créer le dossier de cache de nginx :
    • mkdir /var/cache/nginx
    • chown www-data:www-data /var/cache/nginx
  • Préparer le dossier de config :
    • cd /etc/nginx
    • mkdir sites-available : contient les fichiers de config pour chaque domaine virtuel
    • mkdir sites-enabled : permet à l'aide de lien d'activer ou pas un site sans supprimer son fichier de config
  • Créer un espace “localhost” :
    • mkdir /home/admin/www/yilgarn
    • chown admin:admin /home/admin/www/yilgarn
    • Ajouter le fichier “yilgarn.clapas.ovh.conf” décrit ci-dessous au dossier /etc/nginx/sites-available/
    • Créer un lien dans le dossiers /etc/nginx/sites-enabled/ : ln -s /etc/nginx/sites-available/yilgarn.clapas.ovh.conf /etc/nginx/sites-enabled/yilgarn.clapas.ovh.conf
  • Adapter le fichier nginx.conf avec le contenu indiqué ci-dessous : vi /etc/nginx/nginx.conf
  • Démarrer le serveur : service nginx start

Fichier /etc/nginx/nginx.conf :

user  www-data www-data; # Default: nobody
worker_processes  4; # Default : 1
# Nombre de fichiers ouverts par processeur
worker_rlimit_nofile 100000;
 
pid /var/run/nginx.pid;
 
# [ debug | info | notice | warn | error | crit ]
error_log  /var/log/nginx-error.log  info;
 
events {
    worker_connections  1024; # Default : 1024
    # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;
    # use kqueue;
    use epoll;
}
 
http {
    include  mime.types;
    # include  /etc/nginx/fastcgi.conf;
    index    index.html index.htm index.php;
 
    default_type  application/octet-stream;
 
    log_format main   '"$remote_addr" $host [$time_local] '
                                '"$request" $status $body_bytes_sent '
                                '$request_length $bytes_sent "$http_referer" '
                                '"$http_user_agent" $request_time "$gzip_ratio"';
 
    # La ligne ci-dessous semble inutile puisqu'il faut la redéfinir dans chaque vhost : server {}
    access_log  /var/log/nginx-access.log  main;
 
    sendfile       on;
    tcp_nopush     on;
 
    # 1er param : timeout pour les connections keep-alive ; 2ème param : valeur du header "Keep-Alive: timeout=" envoyé en réponse
    keepalive_timeout 30 30;
    # délai d'attente de la réponse de php-fpm : à accorder avec request_terminate_timeout dans la conf de php-fpm
    fastcgi_read_timeout 3600s;
 
    gzip on;
    gzip_comp_level 9; # 1 <= level <= 9
    gzip_min_length 50; # les fichiers plus petits que 50 octets ne sont pas compressés
    # types de fichiers à compresser
    gzip_types
        text/css
        text/plain
        text/javascript
        application/javascript
        application/json
        application/x-javascript
        application/xml
        application/xml+rss
        application/xhtml+xml
        application/x-font-ttf
        application/x-font-opentype
        application/vnd.ms-fontobject
        image/svg+xml
        image/x-icon
        application/rss+xml
        application/atom_xml;
 
    # Load all vhosts !
    include /etc/nginx/sites-enabled/*.conf;
}
  • Créer les dossiers suivant :
    • mkdir /home/admin/_logs
    • mkdir /home/admin/_sessions
  • Exemple de fichier de config pour le domaine hébergeant le statut de Nginx.
    • Domaine yilgarn.clapas.ovh , fichier /etc/nginx/site-available/yilgarn.clapas.ovh.conf :
      server {
          server_name yilgarn.clapas.ovh www.yilgarn.clapas.ovh;
          root "/home/admin/www/yilgarn";
       
          index index.php index.html index.htm;
          client_max_body_size 10m;
       
          access_log /home/admin/_logs/access.log;
          access_log /var/log/nginx-access.log main;  
          error_log /home/admin/_logs/error.log;
       
          ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''#
          # BLOCAGE - Bloquer l'accès à certains robots et extracteurs de contenu
       
          # Bloquer l'accès à certains robots
          if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { 
              return 401;
          }   
          # Bloquer l'accès aux extracteurs de contenu
          if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { 
              return 401;
          }   
       
          # PROTECTION - Éviter l'affichage de fichiers sensibles
       
          # Éviter l'affichage du contenu des dossiers des gestionnaires de versions
          location ~ "\.(svn|git|hg|bzr|cvs)" {
              return 404;
          }   
       
          # Éviter l'affichage des fichiers de config en .ini
          location ~ "\.ini$" {
              return 404;
          }   
       
          # Éviter l'affichage des fichiers sensibles
          location ~ "\.(htaccess|htpasswd)$" {
              return 404;
          }   
       
          # AUTHENTIFICATION HTTP - Zones à accès restreint par mot de passe
       
          # Fichiers php de gestion : OpCache, Log, Info PHP...
          location ~ "/(info|log|op).php" {
              auth_basic "Zone restreinte. Indiquez un login et mot de passe.";
              auth_basic_user_file /home/admin/www/.htpasswd;
       
              include /etc/nginx/fastcgi.conf;
              fastcgi_pass   unix:/var/run/admin_fpm.sock;
          }
       
          # STATUTS
       
          location /nginx_status {
              stub_status on; 
              access_log off;
              allow 127.0.0.1;
              allow 82.239.139.74;
              allow 193.54.123.216;
              allow 162.38.234.0/24;
              deny all;
          }
       
          # Statuts PHP-FPM 5.6
          # ATTENTION : pour voir ces infos, le fichier php-56-fpm.sock doit avoir un droit de lecture pour l'utilisateur "admin"
          location ~ ^/php-56-fpm-(status|ping)$ {
              access_log off;
              include fastcgi_params;
              fastcgi_pass   unix:/var/run/php-56-fpm.sock;
              fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
              allow 127.0.0.1;
              allow 82.239.139.74;
              deny all;
          }
       
          # Statuts PHP-FPM 5.5
          # ATTENTION : pour voir ces infos, le fichier php-55-fpm.sock doit avoir un droit de lecture pour l'utilisateur "admin"
          location ~ ^/php-55-fpm-(status|ping)$ {
              access_log off;
              include fastcgi_params;
              fastcgi_pass   unix:/var/run/php-55-fpm.sock;
              fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
              allow 127.0.0.1;
              allow 82.239.139.74;
              deny all;
          }
       
          # Statuts PHP-FPM 5.4
          # ATTENTION : pour voir ces infos, le fichier php-54-fpm.sock doit avoir un droit de lecture pour l'utilisateur "admin"
          location ~ ^/php-54-fpm-(status|ping)$ {
              access_log off;
              include fastcgi_params;
              fastcgi_pass   unix:/var/run/php-54-fpm.sock;
              fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
              allow 127.0.0.1;
              allow 82.239.139.74;
              deny all;
          }
       
          # Réecritures générales
       
          location / {
              try_files $uri $uri/ /index.php$uri?$args;
          }
       
          location ~ "^(.+\.php)($|/)" {
              fastcgi_split_path_info ^(.+\.php)(.*)$;
       
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              fastcgi_param SCRIPT_NAME $fastcgi_script_name;
              fastcgi_param PATH_INFO $fastcgi_path_info;
              fastcgi_param SERVER_NAME $host;
       
              if ($uri !~ "^/uploads/") {
                  fastcgi_pass   unix:/var/run/admin_fpm.sock;
              }
              include fastcgi_params;
          }
       
          location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
              expires max;
              log_not_found off;
              access_log off;
          }
       
          location ~* \.(html|htm)$ {
              expires 30m;
          }
      }

Domaine sql.clapas.ovh , fichier /etc/nginx/site-available/sql.clapas.ovh.conf :

server {
    server_name sql.clapas.ovh www.sql.clapas.ovh;
    root "/home/admin/www/phpmyadmin";
 
    index index.php index.html index.htm; 
    client_max_body_size 10m;
 
    access_log /home/admin/_logs/access.log;
    access_log /var/log/nginx-access.log main;  
    error_log /home/admin/_logs/error.log;
 
    # BLOCAGE - Bloquer l'accès à certains robots et extracteurs de contenu
 
    # Bloquer l'accès à certains robots
    if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { 
        return 401;
    }   
    # Bloquer l'accès aux extracteurs de contenu
    if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { 
        return 401;
    }   
 
    # PROTECTION - Éviter l'affichage de fichiers sensibles
 
    # Éviter l'affichage du contenu des dossiers des gestionnaires de versions
    location ~ "\.(svn|git|hg|bzr|cvs)" {
        return 404;
    }   
 
    # Éviter l'affichage des fichiers de config en .ini
    location ~ "\.ini$" {
        return 404;
    }   
 
    # Éviter l'affichage des fichiers sensibles
    location ~ "\.(htaccess|htpasswd)$" {
        return 404;
    }
 
    # Réecritures générales
 
    location / { 
        try_files $uri $uri/ /index.php$uri?$args;
    }   
 
    location ~ "^(.+\.php)($|/)" {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SERVER_NAME $host;
 
        if ($uri !~ "^/uploads/") {
            fastcgi_pass   unix:/var/run/admin_fpm.sock;
        }
        include fastcgi_params;
    }
 
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
        access_log off;
    }
 
    location ~* \.(html|htm)$ {
        expires 30m;
    }
}

Fichier /etc/nginx/site-available/api.bota.ovh.conf (s'en inspirer pour api-test.bota.ovh , en ajustant le server_name, le root, les logs etc.) :

server {
    server_name api.bota.ovh www.api.bota.ovh;
    root "/home/apibota/www";
 
    index index.php index.html index.htm;
    client_max_body_size 50m;
 
    access_log /home/apibota/_logs/access.log;
    access_log /var/log/nginx-access.log main;
    error_log /home/apibota/_logs/error.log;
 
    if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { 
        return 401;
    }   
 
    if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { 
        return 401;
    }   
 
    # Éviter l'affichage du contenu des dossiers des gestionnes de versions
    location ~ "\.(svn|git|hg|bzr|cvs)" {
        return 404;
    }
 
    # Eviter l'affichage des fichiers de config en .ini
    location ~ "\.ini$" {
        return 404;
    }
 
    location / { 
        try_files $uri $uri/ /index.php$uri?$args;
    }
 
    # CORS dynamique multi-domaines
    set $cors_origine_acceptee "http://www.bota.ovh";
    if ($http_origin ~* (www\.bota\.ovh|localhost)) {
        set $cors_origine_acceptee "$http_origin";
    }
 
    # Entêtes pour CORS
    add_header Access-Control-Allow-Origin "$cors_origine_acceptee"; # mode dynamique
    add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
    add_header Access-Control-Allow-Credentials "true";
    add_header Access-Control-Expose-Headers "X-DebugJrest-Data";
 
    # redéfinition par défaut de la query_string
    set $query_string_api $args;
 
    location ~ "^(.+\.php)($|/)" {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
 
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass   unix:/var/run/apibota_fpm.sock;
 
        # Réecriture des headers pour l'API d'eFlore
        fastcgi_param REQUEST_URI $request_uri_api;
        fastcgi_param QUERY_STRING $query_string_api;
    }
 
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
        access_log off;
    }
 
    location ~* \.(html|htm)$ {
        expires 30m;
    } 
}
  • cd /home/admin/script/nginx/
  • wget http://www.sebdangerfield.me.uk/wp-content/uploads/2012/05/create_php_vhost.tar.gz
  • tar xzvf create_php_vhost.tar.gz
  • mv create_php_vhost.tar.gz create_php_vhost/
  • cd create_php_vhost/
  • Créer un fichier de test : vi test.php
    • Contenu : <pre><?php var_export($_SERVER)?></pre>
  • Modifier le script général : vi create_php_site.sh
    • Remplacer le nom de dossier “public_html” par “www” dans le script (lignes 51, 53 et 55)
    • Remplacer la ligne 50 par :
       if [ "$CHANGEROOT" = "y" ]; then 
    • Après la ligne 98 ajouter :
      # Copy the test.php file''
      cp $CURRENT_DIR/test.php /home/$HOME_DIR$PUBLIC_HTML_DIR/
      echo "Test installation with : http://$DOMAIN/test.php"
  • Créer un script spécifique à une version de php :
    • cp create_php_site.sh create_php56_site.sh
    • vi create_php56_site.sh
      • PHP_INI_DIR='/usr/local/php/5.6/etc/fpm.d/'
      • PHP_FPM_INIT='/etc/init.d/php-56-fpm'
  • cp nginx.vhost.conf.template nginx.vhost.conf.template.default
  • cp pool.conf.template pool.conf.template.default
  • Changer les droits de tous les fichiers : chown admin:users ./*

Remplacer le contenu de nginx.vhost.conf.template par :

server {
    server_name @@HOSTNAME@@ www.@@HOSTNAME@@;
    root "@@PATH@@";
 
    index index.php;
    client_max_body_size 10m;
 
    access_log @@LOG_PATH@@/access.log;
    access_log /var/log/nginx-access.log main;
    error_log @@LOG_PATH@@/error.log;
 
    if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { 
        return 401;
    }   
 
    if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { 
        return 401;
    }   
 
    location / { 
        try_files $uri $uri/ /index.php$uri?$args;
    }   
 
    location ~ "^(.+\.php)($|/)" {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SERVER_NAME $host;
 
        if ($uri !~ "^/uploads/") {
            fastcgi_pass   unix:@@SOCKET@@;
        }   
        include        fastcgi_params;
    }   
 
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
        access_log off;
    }   
 
    location ~* \.(html|htm)$ {
        expires 30m;
    }   
 
    location ~* /\.(ht|git|svn) {
        deny  all;
    }   
}

Remplacer le contenu de pool.conf.template par :

; Doc sur les paramètres : http://www.php.net/manual/fr/install.fpm.configuration.php
[@@USER@@]
listen = /var/run/@@USER@@_fpm.sock
listen.owner = @@USER@@
listen.group = @@USER@@
listen.mode = 0660
user = @@USER@@
group = @@USER@@
pm = dynamic
pm.max_children = @@MAX_CHILDS@@
pm.start_servers = @@START_SERVERS@@
pm.min_spare_servers = @@MIN_SERVERS@@
pm.max_spare_servers = @@MAX_SERVERS@@
pm.max_requests = 500 
request_terminate_timeout = 30s 
chdir = / 
php_admin_value[session.save_path] = "@@HOME_DIR@@/_sessions"
php_admin_value[open_basedir] = "@@HOME_DIR@@:/usr/share/pear:/usr/share/php:/tmp:/usr/local/lib/php"
  • informatique/serveurs/installation-logiciels/nginx.txt
  • Dernière modification : 2020/05/22 19:07
  • de jpmilcent