Aller au contenu

Proxy

Qu'est ce qu'un proxy?

Pour vulgariser, il s'agit d'un intermedaire entre 2 services, ou 2 ordinateurs. Par exemple :

  • Votre ordinateur passe par un proxy : le proxy peut par exemple empécher l'accès à certains sites
  • En vous connectant à un proxy vous pouvez contourner les filtrages (un proxy est un intermédiaire, pensez aux pub de VPN sur youtube)
  • Surveillez les communcations entre plusieurs apareils, et créer des logs en cas d'obligation

Mon VPN est un proxy alors ? Vous vous connectez bien à un intermédaire pour pouvoir accéder à des sites web. Donc selon la définition, oui. Le VPN (Virtual Private Network) est surtout le moyen de vous connecter á un proxy. Par exemple vous pouvez un tunnel VPN avec votre Freebox. Vous pouvez accéder à vos ordinateurs de manière sécuriser. Installez un proxy qui vous donne renvoie le site internet voulu. Voila vous venez de créer un VPN comme dans la pub (sauf que vous pouvez pas changer de pays sauf si vous installer plein de freebox partout) Dans le cas suivant je vais vous montrer comment utiliser un proxy en utilisant nginx Donc maintenant si vous bien compris :

  • Un VPN utilise un proxy.
  • Un proxy est un intermédiaire pouvant surveiller vos communications
  • Donc je dois avoir confiance dans mon fournisseur VPN, car il peut vous surveiller

Mes excuses pour cette petite disgression.

nginx

NGINX Open Source2 ou NGINX (également orthographié Nginx ou nginx) est un logiciel libre de serveur Web (ou HTTP) ainsi qu'un proxy inverse écrit par Igor Sysoev, dont le développement a débuté en 2002 pour les besoins d'un site russe à très fort trafic (Rambler). Source wikipedia

Nginx va servir d'intermediaire entre Gunicorn et Internet.

  • Nginx va gerer les log de connection
  • Nginx peut s'occuper de gerer le https
  • Nginx peut aussi renvoyé les requetes http vers le https. (on parle de reverse proxy)

Installation et Configuration

Sous linux installation par gestionnaire de paquets (apt-get install nginx), image docker Sous windows et mac l installateur se trouve dans la session téléchargement du site nginx.org

La configuration se fait dans le fichier /etc/nginx/nginx.conf Vous pouvez créer plusieurs fichiers pour ne pas tout mettre dans le fichier configuration. Un petit tuto est disponible ici.

Sinon pour faire simple : Pour configurer un service nginx, il faut ajouter un service au fichier nginx.conf, par exemple :

http { # nom du service
    include       mime.types;
    default_type  application/octet-stream;

    # configurer les logs les options du services ...
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server { #configurer le serveur
        listen       872; #port à écouter
        server_name  adresse.votresite; # nom du serveur (utile par exemple pour les certificats)

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # pour indiquer à Flask qu'il se trouve derriere un proxy
        location / {
            proxy_pass http://localhost:3513;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Prefix /;
        }

        #error_page  404              /404.html; #si vous voulez configurer les pages d'erreurs

        # 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;
        }
    }

Pour un site statique, ou les fichiers statiques pour alléger le backend, il vous faut un utilisateur avec les droits d'accès aux fichiers, préciser le chemin web avec location et indiqué diverses options.

user tux;
   server {
        server_name  barrmath.ovh ;
        location / {
                alias /home/tux/piweb2/site/;
                index index.html;
                try_files $uri $uri/ $uri.html =404;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

Tips

La fonction envsubst peut vous permettre de modifier vos fichier conf dans des containeurs de votre nginx.conf. Il suffit de faire un template.

exemple:

fichier nginx.template

user root;
worker_processes                auto; # it will be determinate automatically by the number of core

error_log                       /var/log/nginx/error.log warn;
#pid                             /var/run/nginx/nginx.pid; # it permit you to use rc-service nginx reload|restart|stop|start

events {
    worker_connections          1024;
}

http {
    include                     /etc/nginx/mime.types;
    default_type                application/octet-stream;
    sendfile                    on;
    access_log                  /var/log/nginx/access.log;
    keepalive_timeout           3000;
    server {
        listen                  80;
        location ${BASE_URL}static/{
            alias /app/benevalibre/var/static/;
            # Optionnel : ne pas journaliser l'accès au fichier statisque
            access_log off;
        }
        location ${BASE_URL}media/ {
            alias /app/benevalibre/var/media;
            # Optionnel : ne pas journaliser l'accès aux media
            access_log off;
        }
        location ${BASE_URL}favicon.ico {
            alias /app/benevalibre/var/static/favicon/favicon.ico;
            # Optionnel : ne pas journaliser l'accès au favicon
            access_log off;
        }
        location ${BASE_URL}{
            proxy_set_header Host ${DOLLAR}http_host;
            proxy_set_header X-Forwarded-For ${DOLLAR}proxy_add_x_forwarded_for;
            proxy_redirect off;
            proxy_pass http://127.0.0.1:8000;
        }
        error_page              500 502 503 504  /50x.html;
        location /50x.html {
              root /var/lib/nginx/html;
        }
    }
}
export DOLLAR="$"
envsubst < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf

Tips

Le export dollar="$" permet de garder le $ nécessaire dans les proxy_set_header

Alternative

Suite au rachat de Nginx par F5 Network, certaines personnes ont proposé un fork de nginx.

  • freenginx un fork 100% libre de nginx sans entreprise lucrative.
  • angie un fork du créateur original sous tutel de Angie sofware Société russe

Vous pouvez utiliser d'autre service comme Apache httpd ou microsoft ISS

Ressources

nginx

freenginx

angie

Apache httpd

microsoft ISS