meta données pour cette page
Modifier les contextes virtuels (Nginx)
Avant de modifier quoi que ce soit, il faut dans un premier temps faire une sauvagarde du ou des fichier(s) puis activer la nouvelle configuration:
cp /etc/nginx/site-available/default /etc/nginx/site-available/mon_site.com ln -s /etc/nginx/site-available/mon_site.com /etc/nginx/site-enabled/mon_site.com
Et n'oublions pas de vérifier que la syntaxe dans le fichier de configuration est correcte :
nginx -t
Lister un répertoire
server { location ~/accueil { autoindex on; } }
Filtrer les accès
On peut le faire que par IP ou par réseau logique :
location /strategie { allow 192.168.1.129; deny all; } location /docs { deny 192.168.0.0/24; allow ::1; # Allow étant présent par défaut }
Redirection HTTP vers HTTPS
rewrite ^/(.*)$$scheme://$host$request_uri permanent;
ou
return 301 https://$host$request_uri;
Redirection d'un domaine
if ($host = 'domaine.fr') { rewrite ^/(.*)$ http://www.domaine.fr/$1 permanent; }
Redirection http vers https
if ($scheme != "https") { return 301 https://$host$uri; }
Plusieurs domaines par IP
server { # On défini par la même occasion que c'est le site par défaut listen 80 default; server_name toto.org; root /var/www/html/toto; index index.html; } server { listen 80; server_name titi.org; root /var/www/html/titi; index index.html; }
Il existe une autre solution avec les virtualhosts dynamique
server_name ~^(www\.)?(?<domain>.+)$; root /var/www/html/$domain/;
Ainsi http://toto.org/index.html revient à se rendre dans le dossier /var/www/html/toto.com/index.html
Créer un Alias
Pour une courte période on peut simplifier l'accès à une ressource situé sur un serveur web en raccourcissant son URL :
location /court { root /pointe/vers/un/autre/dossier; alias /permet/de/faire/un/chemin/plus/court/; }
Exécuter des scripts
Nginx ne disposant pas de module pour les exécuter, il communique donc avec un logiciel tiers comme Spawn-fcgi :
apt-get install spawn-fcgi
Il faut également que le script en question soit exécutable et que ses dépendances soient installés. Pour le cas d'un programme écrit en ruby, il aura besoin des paquets suivants :
apt-get install ruby ruby-dev gem install fcgi
Voici un exemple de code écrit en ruby :
On configure le contexte du serveur Nginx :
server { location ~ \.rb { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; } }
Lors de l'installation de Nginx, ils ont eu la bonne idée d'y apporter une pré-configuration inclue dans le fichier /etc/nginx/fastcgi_params. Il nous reste plus qu'a redémarrer le service puis de lançer le programme spawn-fcgi :
spawn-fcgi -d /var/www/html/ -f /var/www/html/s.rb -a 127.0.0.1 -p 9000
Réécriture d’URL
Par exemple http://mon-site.com/test/ devienne http://mon-site.com/docs/index.html :
- Soit avec Rewrite
server { rewrite /test/ /docs/index.html; root /var/www/html; }
- Soit avec Return qui retourne en plus le code d'erreur 301 :
server { location /test { return 301 http://mon-site.com/docs/index.html; } }
- Réécriture conditionnelle
On veut que le visiteur 192.167.1.31 accède à une page du site différente par rapport aux autres Internautes :
server { if ( $remote_addr = "192.168.1.31" ) { rewrite / /premium/; } }
Informations sur le service
server { location /status { stub_status on; } }
Personnaliser les logs
http { log_format filtre '$pid' '"$request"'; server { listen 80; root /var/www/html; index index.html; access_log /var/log/nginx/toto.access.log filtre; } }
Dans le log_format ont choisi les variables d'environnement que l'on souhaite utiliser.
Filtrage conditionnel
http { map $remote_addr $mon_filtre { default 0; 192.168.1.30 1; } server { if($mon_filtre) { access_log /var/log/nginx/filtre.access.log combined; } } }
Limiter les méthodes HTTP
Admettons qu'une ressource doit être uniquement accessible en lecture et pas moyen d'envoyer une image. On insérer ces directives :
server{ location /secure { limit_except GET { } } }