Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
informatique:serveurs:installation:logiciels:nginx [2020/02/09 14:46] – [Installation du script de création des domaines virtuels] jpmilcent | informatique:serveurs:installation:logiciels:nginx [2020/02/09 14:48] (Version actuelle) – supprimée jpmilcent | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ======Installation de Nginx====== | ||
- | ===== Compiler Nginx ===== | ||
- | * Passer en admin : '' | ||
- | * Se rendre dans le dossier des scripts : '' | ||
- | * Lancer le script : '' | ||
- | |||
- | ===== Configurer Nginx ===== | ||
- | * Créer le dossier de cache de nginx : | ||
- | * '' | ||
- | * '' | ||
- | * Préparer le dossier de config : | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * Créer un espace " | ||
- | * '' | ||
- | * '' | ||
- | * Ajouter le fichier " | ||
- | * Créer un lien dans le dossiers / | ||
- | * Adapter le fichier nginx.conf avec le contenu indiqué ci-dessous : '' | ||
- | * Démarrer le serveur : '' | ||
- | |||
- | ===== Config générale de nginx ===== | ||
- | Fichier / | ||
- | <code nginx> | ||
- | user www-data www-data; # Default: nobody | ||
- | worker_processes | ||
- | # Nombre de fichiers ouverts par processeur | ||
- | worker_rlimit_nofile 100000; | ||
- | |||
- | pid / | ||
- | |||
- | # [ debug | info | notice | warn | error | crit ] | ||
- | error_log | ||
- | |||
- | events { | ||
- | worker_connections | ||
- | # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ; | ||
- | # use kqueue; | ||
- | use epoll; | ||
- | } | ||
- | |||
- | http { | ||
- | include | ||
- | # include | ||
- | index index.html index.htm index.php; | ||
- | |||
- | default_type | ||
- | |||
- | log_format main '" | ||
- | '" | ||
- | ' | ||
- | '" | ||
- | |||
- | # La ligne ci-dessous semble inutile puisqu' | ||
- | access_log | ||
- | |||
- | sendfile | ||
- | tcp_nopush | ||
- | |||
- | # 1er param : timeout pour les connections keep-alive ; 2ème param : valeur du header " | ||
- | keepalive_timeout 30 30; | ||
- | # délai d' | ||
- | 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/ | ||
- | application/ | ||
- | application/ | ||
- | application/ | ||
- | application/ | ||
- | application/ | ||
- | application/ | ||
- | application/ | ||
- | application/ | ||
- | application/ | ||
- | image/ | ||
- | image/ | ||
- | application/ | ||
- | application/ | ||
- | |||
- | # Load all vhosts ! | ||
- | include / | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Config du domaine d' | ||
- | * Créer les dossiers suivant : | ||
- | * '' | ||
- | * '' | ||
- | * Exemple de fichier de config pour le domaine hébergeant le statut de Nginx. | ||
- | * Domaine // yilgarn.clapas.ovh //, fichier '' | ||
- | server { | ||
- | server_name yilgarn.clapas.ovh www.yilgarn.clapas.ovh; | ||
- | root "/ | ||
- | |||
- | index index.php index.html index.htm; | ||
- | client_max_body_size 10m; | ||
- | |||
- | access_log / | ||
- | access_log / | ||
- | error_log / | ||
- | |||
- | ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''# | ||
- | # BLOCAGE - Bloquer l' | ||
- | |||
- | # Bloquer l' | ||
- | if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { | ||
- | return 401; | ||
- | } | ||
- | # Bloquer l' | ||
- | if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { | ||
- | return 401; | ||
- | } | ||
- | |||
- | # PROTECTION - Éviter l' | ||
- | |||
- | # Éviter l' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | |||
- | # Éviter l' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | |||
- | # Éviter l' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | | ||
- | # AUTHENTIFICATION HTTP - Zones à accès restreint par mot de passe | ||
- | | ||
- | # Fichiers php de gestion : OpCache, Log, Info PHP... | ||
- | location ~ "/ | ||
- | auth_basic "Zone restreinte. Indiquez un login et mot de passe."; | ||
- | auth_basic_user_file / | ||
- | |||
- | include / | ||
- | fastcgi_pass | ||
- | } | ||
- | |||
- | # STATUTS | ||
- | |||
- | location / | ||
- | 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/ | ||
- | 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' | ||
- | location ~ ^/ | ||
- | access_log off; | ||
- | include fastcgi_params; | ||
- | fastcgi_pass | ||
- | 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' | ||
- | location ~ ^/ | ||
- | access_log off; | ||
- | include fastcgi_params; | ||
- | fastcgi_pass | ||
- | 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' | ||
- | location ~ ^/ | ||
- | access_log off; | ||
- | include fastcgi_params; | ||
- | fastcgi_pass | ||
- | 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/ / | ||
- | } | ||
- | |||
- | location ~ " | ||
- | 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 !~ " | ||
- | fastcgi_pass | ||
- | } | ||
- | 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; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Exemple de config pour le sous-domaine sql.clapas.ovh ===== | ||
- | Domaine // sql.clapas.ovh //, fichier '' | ||
- | <code nginx> | ||
- | server { | ||
- | server_name sql.clapas.ovh www.sql.clapas.ovh; | ||
- | root "/ | ||
- | |||
- | index index.php index.html index.htm; | ||
- | client_max_body_size 10m; | ||
- | |||
- | access_log / | ||
- | access_log / | ||
- | error_log / | ||
- | |||
- | # BLOCAGE - Bloquer l' | ||
- | |||
- | # Bloquer l' | ||
- | if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { | ||
- | return 401; | ||
- | } | ||
- | # Bloquer l' | ||
- | if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { | ||
- | return 401; | ||
- | } | ||
- | |||
- | # PROTECTION - Éviter l' | ||
- | |||
- | # Éviter l' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | |||
- | # Éviter l' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | |||
- | # Éviter l' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | | ||
- | # Réecritures générales | ||
- | |||
- | location / { | ||
- | try_files $uri $uri/ / | ||
- | } | ||
- | |||
- | location ~ " | ||
- | 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 !~ " | ||
- | fastcgi_pass | ||
- | } | ||
- | 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; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Exemple de config d'un domaine fournissant une api ===== | ||
- | Fichier '' | ||
- | <code nginx> | ||
- | server { | ||
- | server_name api.bota.ovh www.api.bota.ovh; | ||
- | root "/ | ||
- | |||
- | index index.php index.html index.htm; | ||
- | client_max_body_size 50m; | ||
- | |||
- | access_log / | ||
- | access_log / | ||
- | 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' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | |||
- | # Eviter l' | ||
- | location ~ " | ||
- | return 404; | ||
- | } | ||
- | |||
- | location / { | ||
- | try_files $uri $uri/ / | ||
- | } | ||
- | |||
- | # CORS dynamique multi-domaines | ||
- | set $cors_origine_acceptee " | ||
- | if ($http_origin ~* (www\.bota\.ovh|localhost)) { | ||
- | set $cors_origine_acceptee " | ||
- | } | ||
- | |||
- | # Entêtes pour CORS | ||
- | add_header Access-Control-Allow-Origin " | ||
- | add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"; | ||
- | add_header Access-Control-Allow-Credentials " | ||
- | add_header Access-Control-Expose-Headers " | ||
- | |||
- | # redéfinition par défaut de la query_string | ||
- | set $query_string_api $args; | ||
- | |||
- | location ~ " | ||
- | fastcgi_split_path_info ^(.+\.php)(.*)$; | ||
- | |||
- | include / | ||
- | fastcgi_pass | ||
- | |||
- | # Réecriture des headers pour l'API d' | ||
- | 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; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Installation du script de création des domaines virtuels ===== | ||
- | * '' | ||
- | * ''< | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * Créer un fichier de test : '' | ||
- | * Contenu : '' | ||
- | * Modifier le script général : '' | ||
- | * Remplacer le nom de dossier " | ||
- | * Remplacer la ligne 50 par : <code bash> if [ " | ||
- | * Après la ligne 98 ajouter : <code bash> | ||
- | # Copy the test.php file'' | ||
- | cp $CURRENT_DIR/ | ||
- | echo "Test installation with : http:// | ||
- | </ | ||
- | * Créer un script spécifique à une version de php : | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * Changer les droits de tous les fichiers : '' | ||
- | |||
- | Remplacer le contenu de nginx.vhost.conf.template par : | ||
- | <code nginx> | ||
- | server { | ||
- | server_name @@HOSTNAME@@ www.@@HOSTNAME@@; | ||
- | root " | ||
- | |||
- | index index.php; | ||
- | client_max_body_size 10m; | ||
- | |||
- | access_log @@LOG_PATH@@/ | ||
- | access_log / | ||
- | error_log @@LOG_PATH@@/ | ||
- | | ||
- | 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/ / | ||
- | } | ||
- | | ||
- | location ~ " | ||
- | 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 !~ " | ||
- | fastcgi_pass | ||
- | } | ||
- | include | ||
- | } | ||
- | |||
- | location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { | ||
- | expires max; | ||
- | log_not_found off; | ||
- | access_log off; | ||
- | } | ||
- | | ||
- | location ~* \.(html|htm)$ { | ||
- | expires 30m; | ||
- | } | ||
- | |||
- | location ~* / | ||
- | deny all; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Remplacer le contenu de pool.conf.template par : | ||
- | <code properties> | ||
- | ; Doc sur les paramètres : http:// | ||
- | [@@USER@@] | ||
- | listen = / | ||
- | 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] = " | ||
- | php_admin_value[open_basedir] = " | ||
- | </ | ||
- | |||
- | ===== Activer Speedy sur Nginx ===== | ||
- | * Ressource : http:// | ||
- | * Pour activer Speedy, il faut : | ||
- | * compiler Nginx avec le support de Speedy ('' | ||
- | * avoir OpenSSL installé en version 1.0.1 minimum | ||
- | * Modifier ensuite dans le fichier de conf du domaine où l'on veut activer Speedy, avec les infos suivante : <code nginx> | ||
- | server { | ||
- | listen 443 ssl spdy; | ||
- | |||
- | ssl_certificate server.crt; | ||
- | ssl_certificate_key server.key; | ||
- | ... | ||
- | } | ||
- | </ |