Le frontal derive ses vhosts des expositions publiques (meme derivation que l edge), filtre par ModSecurity v3 + OWASP CRS (DetectionOnly d abord, eprouve), refuse les noms inconnus, et ne sert plus rien lui-meme. Les sites statiques passent au dorsal, relaye par l edge et par le frontal. Sondes : frontal (nouvelle), sites-servis suit le dorsal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
41 lines
1.5 KiB
Django/Jinja
41 lines
1.5 KiB
Django/Jinja
# Gere par Set-OPS (role serveur_web_frontal). Ne pas editer a la main.
|
|
#
|
|
# LE SERVEUR PAR DEFAUT REFUSE TOUT NOM INCONNU (meme regle que l'edge) : sans lui, nginx
|
|
# confie un nom inconnu au premier vhost, et un balayage de l'adresse publique recevrait un
|
|
# service qu'il n'a pas nomme.
|
|
server {
|
|
listen 80 default_server;
|
|
listen [::]:80 default_server;
|
|
server_name _;
|
|
return 444;
|
|
}
|
|
{% for expo in serveur_web_frontal_expositions | default([]) %}
|
|
{% if expo.hote in hostvars and hostvars[expo.hote].ansible_host is defined and expo.port %}
|
|
{% set tls = (expo.port | int) in serveur_web_frontal_ports_tls %}
|
|
|
|
# {{ expo.fqdn }} -> {{ expo.hote }}:{{ expo.port }} ({{ expo.application }})
|
|
# En clair en attendant son certificat Let's Encrypt.
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name {{ expo.fqdn }};
|
|
|
|
modsecurity on;
|
|
modsecurity_rules_file {{ serveur_web_frontal_waf_dir }}/main.conf;
|
|
|
|
location / {
|
|
proxy_pass {{ 'https' if tls else 'http' }}://{{ hostvars[expo.hote].ansible_host }}:{{ expo.port }};
|
|
{% if tls %}
|
|
proxy_ssl_verify on;
|
|
proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
|
|
proxy_ssl_name {{ expo.hote }}.{{ domaine_interne }};
|
|
proxy_ssl_server_name on;
|
|
{% endif %}
|
|
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;
|
|
}
|
|
}
|
|
{% endif %}
|
|
{% endfor %}
|