# GENERE par Set-OPS (role serveur_ops). Ne pas editer a la main. # # LE VESTIBULE DE LA CONSOLE. Le GUI, lui, n'ecoute que la boucle locale. # # TOUT CE QUI EST PUBLIE PASSE PAR ICI, et l'authentification est posee au niveau du # `server` — pas d'un `location`. Placee dans le seul bloc de relais, elle laisserait # passer tout chemin qu'un `location` plus specifique attraperait en premier. Une # serrure qu'on contourne par la porte d'a cote n'est pas une serrure. server { listen {{ serveur_ops_gui_nginx_bind }}{{ serveur_ops_gui_port_public }}; {% if not serveur_ops_gui_nginx_bind %} listen [::]:{{ serveur_ops_gui_port_public }}; {% endif %} server_name {{ serveur_ops_hostname }}; {% if serveur_ops_gui_auth == 'locale' %} # SANS ANNUAIRE : un mot de passe, et il vaut pour toute la fabric. C'est un repli # assume, pas un choix — voir `serveur_ops_gui_auth` dans les defauts du role. auth_basic "{{ serveur_ops_gui_realm }}"; auth_basic_user_file {{ serveur_ops_gui_htpasswd }}; {% else %} # AVEC ANNUAIRE : `serveur_oauth2_proxy` se tient devant, sur la MEME machine, et # c'est lui qui est publie. Ce vhost n'ecoute alors que la boucle locale # (`serveur_ops_gui_nginx_bind`) — un port qui n'est pas ouvert ne se contourne pas. # # LA PREMIERE ECRITURE S'EN REMETTAIT AU PARE-FEU, et le pare-feu ouvrait ce port # depuis `[edge, admin]` : l'edge pouvait donc joindre la console SANS passer par la # passerelle. Le commentaire annoncait une protection que rien ne tenait. {% endif %} # LA CONSOLE DEPLOIE, ET UN DEPLOIEMENT EST LONG. Les delais par defaut de nginx # (60 s) couperaient la reponse au milieu d'un `deployer`, et la page afficherait une # erreur reseau pour une operation qui, elle, continue sur la machine. La pire forme # de mensonge : l'ecran dit echec, la fabric dit succes. proxy_read_timeout {{ serveur_ops_gui_delai | default(3600) }}s; proxy_send_timeout {{ serveur_ops_gui_delai | default(3600) }}s; # LA SORTIE D'UN DEPLOIEMENT ARRIVE AU FIL DE L'EAU. Sans ces deux lignes, nginx la # retiendrait pour l'envoyer d'un bloc : la console resterait muette pendant des # minutes, puis tout apparaitrait d'un coup. proxy_buffering off; gzip off; location / { proxy_pass http://{{ serveur_ops_gui_ecoute }}:{{ serveur_ops_gui_port }}; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }