User Tools

Site Tools


notes:formation_serveur_de_fichiers:rpsni

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
notes:formation_webperso:rpsni [2025/05/12 07:03] – [les machines (virtuelles, conteneurs ou autre)] err404notes:formation_serveur_de_fichiers:rpsni [2025/05/31 08:06] (current) err404
Line 1: Line 1:
 +On n'a besoin d'un reverse proxy **que dans le cas ou on n'a pas d'ipv6**.
 +et comme tout le monde n'a pas encore ipv6 (il y a même des gens qui vont désactiver l'ipv6 sur leur machine...) on va mettre en place un reverse proxy:
 +
 +il suffit d'installer par exemple un server Haproxy, que ce soit dans l'hyperviseur ou une machine virtuelle.
 +
 +il est préférable d'installer le reverse proxy dans une machine virtuelle ou un  conteneur plutôt que dans l'hyperviseur de façon à faciliter les sauvegardes.
 +<div button>et dans mon cas j'ai choisi d'installer le reverse proxy dans la même machine qui fait [[notes:formation_serveur_de_fichiers:dns|serveur de nom de domaine faisant autorité]]</div>
 +
 +dans mon cas les machines virtuelles et les conteneurs ont de l'ipv6, donc les noms de domaines vont directement sur ces machines, pas besoin de //reverse proxy sni// pour l'ipv6.
 +le problème c'est que je n'ai qu'**une seule ipv4 publique** (la box de mon fournisseur d'accès à Internet) et que je suis obligé de partager cette unique ipv4 publique pour toutes mes machines virtuelles ou conteneurs.
 +c'est pour permettre cette cohabitation que j'installe un reverse proxy sni.
 +
 +avec l'ipv6, c'est simple: toutes les machines ont un accès direct à Internet et sont directement joignable depuis Internet, elles sont indépendantes et n'ont pas de problèmes de ports à partager donc pas de problèmes de traduction d'adresses.
 +
 +{{gallery> :notes:formation_serveur_de_fichiers:?300x300 }}
 +====== reverse proxy sni ======
 +on installe le paquet ''haproxy'' disponible dans Debian
 +''apt install haproxy''
 +
 +un seul fichier à éditer: ''/etc/haproxy/haproxy.cfg''
 +
 +
 +<code conf>
 +global
 +        maxconn 60000
 +        log 127.0.0.1  local0  notice
 +        chroot /var/lib/haproxy
 +        stats socket /run/haproxy/admin.sock mode 660 level admin
 +        stats timeout 30s
 +        user haproxy
 +        group haproxy
 +        daemon
 +
 +        # Default SSL material locations
 +        ca-base /etc/ssl/certs
 +        crt-base /etc/ssl/private
 +
 +        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
 +        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
 +        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
 +        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
 +
 +
 +defaults
 +log global
 + mode http
 +        option logasap
 +        option  dontlognull
 +        timeout connect 5000
 +        timeout client  50000
 +        timeout server  50000
 +        errorfile 400 /etc/haproxy/errors/400.http
 +        errorfile 403 /etc/haproxy/errors/403.http
 +        errorfile 408 /etc/haproxy/errors/408.http
 +        errorfile 500 /etc/haproxy/errors/500.http
 +        errorfile 502 /etc/haproxy/errors/502.http
 +        errorfile 503 /etc/haproxy/errors/503.http
 +        errorfile 504 /etc/haproxy/errors/504.http
 +
 +frontend httpweb
 +  mode http
 +  option httplog
 +  bind [::]:80 v6only
 +  bind *:80 
 +  http-request add-header X-Forwarded-For %[src]
 +  use_backend err404_servers if { req.hdr(host) -i err404.numericore.com  }
 +  use_backend planet_servers if { req.hdr(host) -i planet.numericore.com }
 +  default_backend err404_servers
 +
 +frontend httpsweb
 +  mode tcp
 +  option tcplog
 +  bind [::]:443 v6only
 +  bind *:443
 +  use_backend err404_s_servers if { req.hdr(host) -i err404.numericore.com  }
 +  use_backend planet_s_servers if { req.hdr(host) -i planet.numericore.com }
 +  default_backend err404_s_servers
 +
 +
 +backend err404_servers
 +  mode http
 +  balance roundrobin
 +  server err40401 ct-err404:80 check send-proxy
 +
 +backend err404_s_servers
 +  mode tcp
 +  balance roundrobin
 +  option ssl-hello-chk
 +  server err40401 ct-err404:443 check send-proxy
 +
 +
 +backend ikce_servers
 +  mode http
 +  balance roundrobin
 +  server planet01 ct-ikce:80 check  send-proxy
 +
 +backend ikce_s_servers
 +  mode tcp
 +  balance roundrobin
 +  option ssl-hello-chk
 +  server planet01 ct-ikce:443 check send-proxy
 +
 +</code>
 + à la place de ct-err404 et ct-ikce vous utiliserez les ip de vos machines ou leur nom si vous utilisez votre serveur dns.
 +je sépare les bind sur deux lignes: ipv6 et ipv4 pour avoir des logs qui s'affichent mieux.
 +''check'' est utilisé pour vérifier régulièrement la disponibilité du serveur (je n'en ai qu'un mais je pourrais répartir la charge facilement en rajoutant des lignes server)
 +''send-proxy'' est utilisé pour envoyer l'ip réelle et pas celle du reverse proxy
 +
 +====== les machines (virtuelles, conteneurs ou autre) ======
 +dans ces machines, il suffit de modifier /etc/nginx/nginx.conf en rajoutant les trois lignes suivantes juste après ''http {'' :
 +<code>
 +real_ip_header proxy_protocol;
 +real_ip_recursive on;
 +set_real_ip_from 192.168.1.17;
 +</code>
 +
 +vous indiquerez l'ip de votre serveur proxy à la place de 192.168.1.17 et vous relancerez nginx avec ''systemctl reload nginx''
 +
 +lorsque on modifie le fichier de conf nginx, Yunohost ne va pas être content et refusera de les mettre à jour car ils auront étés modifiés, celà vaut pour les certificats, il suffit de forcer pour passer outre.
 +
 +
 +====== la box ======
 +
 +sur la box il faut rediriger les ports 80 et 443 vers l'ip de la machine qui héberge le reverse proxy sni
 +
  
notes/formation_serveur_de_fichiers/rpsni.txt · Last modified: by err404