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
}