NginX Configuration - miguel-antoons/projet_webdev GitHub Wiki
Configuration NginX
Explications
nginx.conf
C'est le fichier de configuration principal de NginX. C'est ici que les paramètres du serveur même vont être configurés et que les différents fichiers seront inclus (tels que le fichier default.conf)
default.conf
C'est dans ce fichier qu'on retrouvera la configuration des différents sites. Dans notre cas on y retrouve 2 sites. D'abord le site https (port 443), qui est le site principal. C'est uniquement sur le site https que le serveur va envoyer une page et autoriser une communication avec le client. Ensuite on retrouve le site http (port 80), qui va simplement rédiriger les clients vers le site https (port 443) dans le cas ou le nom de domaine est juste. Dans le cas contraire, le site http (port 80) enverra simplement le code http "404 not found".
Fichiers de Configuration
nginx.conf
user nginx;
# le nombre de processus que le serveur utilisera
worker_processes auto;
# le fichier de logs où seront envoyés les erreurs
error_log /var/log/nginx/error.log notice;
# l'endroit de stockage de l'id du processus
pid /var/run/nginx.pid;
events {
# nombre maximum de connexions simultanés par un processus
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# évite l'exposition des données sur nginx (version, ...)
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# fichier de logs d'accès au site
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
# longueur maximum d'une connection d'un client non-actif
keepalive_timeout 65;
#gzip on;
# inclu le fichier qui contient les configurations des sites
include /etc/nginx/conf.d/*.conf;
# configurations des différents tailles des buffers pour éviter par exemple des buffer overflow
client_body_buffer_size 16k;
client_header_buffer_size 1k;
client_max_body_size 16M;
large_client_header_buffers 2 1k;
# évite des attackes de clickjacking
add_header X-Frame-Options "SAMEORIGIN";
# bloque les pages générés par du cross site scripting
# active la protection du corss site scripting
add_header X-XSS-Protection "1; mode=block";
}
default.conf
# serveur https qui tourne sur le port 443
server {
# le dossier où NginX va chercher les pages à afficher
root /home/miguel/projet_webdev/react_code/build;
server_name factevis.l2-2.ephec-ti.be;
# on définit où enregistrer les logs de ce site
error_log /etc/nginx/error.log;
access_log /etc/nginx/access.log;
# que faire quand on fait une requête à la racine de la page
location / {
# on limite les requêtes http autorisés
limit_except GET HEAD PUT POST DELETE { deny all; }
index index.html index.htm;
# directive qui évite la page 404 au rechargment du site (vu que c'est une singles page app)
try_files $uri /index.html;
}
# bloqie les agents utilisateurs automatisés
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}
# toutes les requêts qui commencent par /api seront envoyés au serveur local gunicorn
location /api {
include proxy_params;
proxy_pass http://localhost:5000;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# différents paramètres pour le https
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/factevis.l2-2.ephec-ti.be/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/factevis.l2-2.ephec-ti.be/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
# serveur http qui écoute sur le port 80
server {
# si le nom du serveur est correcte, on rédirige le client vers le site https
if ($host = factevis.l2-2.ephec-ti.be) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name factevis.l2-2.ephec-ti.be;
return 404; # managed by Certbot
}