serveurs_nginx derive ses vhosts de docs/domaines.yml (bloc exposition) : pour chaque exposition web ciblant cet edge, un server block est genere (expositions.conf.j2). Amont = entree 'amont' explicite, sinon http://<IP interne de la cible>:<port> resolu depuis l'inventaire. Une exposition non resolvable (cible sans hote actif, ou sans port) est listee mais non publiee. - defaults : serveurs_nginx_groupe (edge cible), serveurs_nginx_publier_expositions. - Les sites declares a la main coexistent. - Ajout du port 3000 a l'exposition forge. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.8 KiB
Django/Jinja
50 lines
1.8 KiB
Django/Jinja
# Vhosts derives de docs/domaines.yml (bloc exposition) — gere par Set-OPS
|
|
# (role serveurs_nginx). Ne pas editer a la main.
|
|
#
|
|
# Une exposition de type "web" produit un vhost si son amont est resolvable :
|
|
# entree "amont" explicite, sinon http://<IP interne de la cible>:<port>.
|
|
# Une exposition sans amont resolvable (cible sans hote actif, ou sans port)
|
|
# est listee ci-dessous mais NON publiee (binding declare, pas encore cablable).
|
|
{% for paire in serveurs_nginx_expositions | default([]) %}
|
|
{% set dom = paire.0.key %}
|
|
{% set expo = paire.1 %}
|
|
{% if (expo.type | default('web')) == 'web' %}
|
|
{% set fqdn = dom if expo.nom in ['@', dom] else (expo.nom ~ '.' ~ dom) %}
|
|
{% set ns = namespace(amont=(expo.amont | default('', true))) %}
|
|
{% if not ns.amont and (groups[expo.cible] | default([]) | length > 0) and (expo.port is defined) and (hostvars[groups[expo.cible] | first].ansible_host is defined) %}
|
|
{% set ns.amont = 'http://' ~ hostvars[groups[expo.cible] | first].ansible_host ~ ':' ~ expo.port %}
|
|
{% endif %}
|
|
{% if ns.amont %}
|
|
|
|
# {{ fqdn }} -> {{ expo.cible }} ({{ ns.amont }})
|
|
{% if serveurs_nginx_redirection_http | bool %}
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name {{ fqdn }};
|
|
return 301 https://$host$request_uri;
|
|
}
|
|
{% endif %}
|
|
server {
|
|
listen 443 ssl;
|
|
listen [::]:443 ssl;
|
|
http2 on;
|
|
server_name {{ fqdn }};
|
|
|
|
ssl_certificate {{ serveurs_nginx_certificat }};
|
|
ssl_certificate_key {{ serveurs_nginx_cle }};
|
|
|
|
location / {
|
|
proxy_pass {{ ns.amont }};
|
|
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;
|
|
}
|
|
}
|
|
{% else %}
|
|
|
|
# (non publie) {{ fqdn }} -> {{ expo.cible }} : amont non resolvable (cible sans hote actif ou sans port).
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|