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