Le système d'exploitation GNU-Linux/Le serveur Web Nginx
InstallationModifier
sudo apt-get install nginx
CommandesModifier
Relancer le serveur :
systemctl restart nginx
Voir la configuration du processus lancé :
nginx -T
Voir les logs :
journalctl -u nginx
Activer un vhost :
ln -s /etc/nginx/sites-available/mon_vhost.conf /etc/nginx/sites-enabled/
systemctl reload nginx
La différence entre "restart" et "reload", est que le premier stoppe tout puis tente de redémarrer, alors que "reload" ne stoppe les anciens processus que si le fichier de configuration ne contient pas d'erreur, et donc que les nouveaux peuvent se lancer. Il est donc plus sécurisé.
ParamètresModifier
La configuration se trouve dans les fichiers .conf du dossier /etc/nginx/conf.d/.
Exemples de configuration :
client_max_body_size 32m;
fastcgi_read_timeout 600;
proxy_read_timeout 600;
vhostsModifier
On peut trouver des validateurs de vhosts en ligne[1].
VariablesModifier
le module ngx_http_core_module offre des variables correspondant à celles d'Apache[2].
- $host
- $alias
- $root
- $realpath_root
- $document_root : $root ou $alias de la requête
- $document_uri
- $request_uri
- $fastcgi_script_name
Mots réservésModifier
Comme dans Apache, la priorité entre les vhosts est déterminée par l'ordre alphabétique des .conf de /etc/nginx/sites-enables.
Les directives sont[3] :
listenModifier
Host et port écoutés par le vhost. Ex :
listen 80;
listen 443 ssl;
server_nameModifier
URL du vhost.
- Exemple simple :
server_name x.example.com alias.example.com;
- Pour désigner un nom de serveur invalide (généralement dans le vhost default) :
server_name _;
- Pour du regex, préfixer avec "~". Ex :
server_name ~^(x|y|z)\.example\.com$;
- Le regex permet même les groupes de capture utilisables dans la suite du vhost (ex : $ma_variable) avec la syntaxe suivante[4] :
(?<ma_variable>.+)
. Exemple avec appel :
- Le regex permet même les groupes de capture utilisables dans la suite du vhost (ex : $ma_variable) avec la syntaxe suivante[4] :
server_name ~(?<branch>.+)-preprod\.example\.com$;
root /var/www/mon_app/preprod/$branch/;
rootModifier
Dossier du système de fichier vers lequel redirige l'URL du vhost.
locationModifier
Bloc paramétrant un chemin donné au sein de l'URL du server_name. Il peut contenir plusieurs autre mots réservés.
includeModifier
internalModifier
denyModifier
expiresModifier
fastcgi_paramModifier
Définit un des paramètres FastCGI[5].
indexModifier
Définit l'index à exécuter. Il peut être global ou inclus dans une location. Ex :
index app.php;
returnModifier
Ex :
return 301 https://$host$request_uri;
rewriteModifier
Réécriture d'URL[6]. Ex :
rewrite ^ http://example.com? permanent;
access_log et error_logModifier
Optionnel : emplacement des logs d'accès et d'erreur. Par défaut, /var/log/nginx/access.log et error.log.
add_headerModifier
Ajoute des clés aux en-têtes HTTP. Par exemple pour les règles de protection Content Security Policy (CSP) contre le cross-site scripting (XSS) :
add_header Content-Security-Policy "default-src 'self';
connect-src *;
img-src 'self' data:;
script-src 'self' 'unsafe-eval' 'unsafe-inline';
style-src 'self' 'unsafe-inline';
";
Pour la protection contre le clickjacking :
add_header X-Frame-Options "SAMEORIGIN" always;
Par ailleurs, des sites d'audit gratuits peuvent ensuite révéler s'il reste des failles.
ExemplesModifier
Pour un site HTTP :
server {
listen 80;
server_name mon_site.localhost;
root /var/www/mon_site;
location / {
try_files $uri /index.html =404;
}
}
Pour un site IPv4 et IPv6 en HTTP et HTTPS :
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443;
ssl_certificate /etc/nginx/conf.d/ssl-certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/nginx/conf.d/ssl-certs/ssl-cert-snakeoil.key;
ssl_trusted_certificate /etc/ssl/private/current.crt;
server_name mon_site.localhost;
root /var/www/mon_site;
location / {
try_files $uri /index.html =404;
}
}
Rediriger le flux HTTP vers HTTPSModifier
Ajouter dans la configuration la ligne commençant par "rewrite" ci-dessous :
server {
listen 80;
server_name nom-domaine.fr www.nom-domaine.fr;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443;
server_name my.domain.com;
ssl on;
[....]
}
RéférencesModifier
- ↑ https://nginx.viraptor.info/
- ↑ http://nginx.org/en/docs/http/ngx_http_core_module.html
- ↑ http://nginx.org/en/docs/http/ngx_http_core_module.html
- ↑ http://nginx.org/en/docs/http/server_names.html
- ↑ https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
- ↑ https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites