[nginx] Add feature to manage multiple certificates, for example for crans.org and for adm.crans.org
Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>certbot_on_virtu
							parent
							
								
									96d5f945e3
								
							
						
					
					
						commit
						72238d79ed
					
				| 
						 | 
					@ -9,7 +9,7 @@ loc_nginx:
 | 
				
			||||||
  servers:
 | 
					  servers:
 | 
				
			||||||
    - server_name:
 | 
					    - server_name:
 | 
				
			||||||
      - lists.crans.org
 | 
					      - lists.crans.org
 | 
				
			||||||
      ssl: true
 | 
					      ssl: crans.org
 | 
				
			||||||
      root: "/usr/lib/cgi-bin/mailman/"
 | 
					      root: "/usr/lib/cgi-bin/mailman/"
 | 
				
			||||||
      index:
 | 
					      index:
 | 
				
			||||||
        - index.htm
 | 
					        - index.htm
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,11 +4,14 @@ glob_nginx:
 | 
				
			||||||
  who: "L'équipe technique du Cr@ns"
 | 
					  who: "L'équipe technique du Cr@ns"
 | 
				
			||||||
  service_name: service
 | 
					  service_name: service
 | 
				
			||||||
  ssl:
 | 
					  ssl:
 | 
				
			||||||
    cert: /etc/letsencrypt/live/crans.org/fullchain.pem
 | 
					    # Add adm.crans.org if necessary
 | 
				
			||||||
    cert_key: /etc/letsencrypt/live/crans.org/privkey.pem
 | 
					    - name: crans.org
 | 
				
			||||||
    trusted_cert: /etc/letsencrypt/live/crans.org/chain.pem
 | 
					      cert: /etc/letsencrypt/live/crans.org/fullchain.pem
 | 
				
			||||||
 | 
					      cert_key: /etc/letsencrypt/live/crans.org/privkey.pem
 | 
				
			||||||
 | 
					      trusted_cert: /etc/letsencrypt/live/crans.org/chain.pem
 | 
				
			||||||
  servers:
 | 
					  servers:
 | 
				
			||||||
    - ssl: false
 | 
					    - ssl: false  # Replace by crans.org or adm.crans.org
 | 
				
			||||||
 | 
					      default: true
 | 
				
			||||||
      server_name:
 | 
					      server_name:
 | 
				
			||||||
        - "default"
 | 
					        - "default"
 | 
				
			||||||
        - "_"
 | 
					        - "_"
 | 
				
			||||||
| 
						 | 
					@ -21,4 +24,5 @@ glob_nginx:
 | 
				
			||||||
  auth_passwd: []
 | 
					  auth_passwd: []
 | 
				
			||||||
  default_server:
 | 
					  default_server:
 | 
				
			||||||
  default_ssl_server:
 | 
					  default_ssl_server:
 | 
				
			||||||
 | 
					  default_ssl_domain: crans.org
 | 
				
			||||||
  deploy_robots_file: false
 | 
					  deploy_robots_file: false
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,26 +37,26 @@ to_backup:
 | 
				
			||||||
loc_nginx:
 | 
					loc_nginx:
 | 
				
			||||||
  service_name: ftp
 | 
					  service_name: ftp
 | 
				
			||||||
  servers:
 | 
					  servers:
 | 
				
			||||||
    server_name:
 | 
					    - server_name:
 | 
				
			||||||
      - "ftp"
 | 
					        - "ftp"
 | 
				
			||||||
      - "ftp.*"
 | 
					        - "ftp.*"
 | 
				
			||||||
      - "mirror"
 | 
					        - "mirror"
 | 
				
			||||||
      - "mirror.*"
 | 
					        - "mirror.*"
 | 
				
			||||||
      - "archive.ubuntu.com"
 | 
					        - "archive.ubuntu.com"
 | 
				
			||||||
      - "fr.archive.ubuntu.com"
 | 
					        - "fr.archive.ubuntu.com"
 | 
				
			||||||
      - "security.ubuntu.com"
 | 
					        - "security.ubuntu.com"
 | 
				
			||||||
      - "ftps"
 | 
					        - "ftps"
 | 
				
			||||||
      - "ftps.*"
 | 
					        - "ftps.*"
 | 
				
			||||||
    root: "/pubftp"
 | 
					      root: "/pubftp"
 | 
				
			||||||
    locations:
 | 
					      locations:
 | 
				
			||||||
      - filter: "/"
 | 
					        - filter: "/"
 | 
				
			||||||
      - params:
 | 
					          params:
 | 
				
			||||||
        - "autoindex on"
 | 
					          - "autoindex on"
 | 
				
			||||||
        - "autoindex_exact_size off"
 | 
					          - "autoindex_exact_size off"
 | 
				
			||||||
        - "add_before_body /.html/HEADER.html"
 | 
					          - "add_before_body /.html/HEADER.html"
 | 
				
			||||||
        - "add_after_body /.html/FOOTER.html"
 | 
					          - "add_after_body /.html/FOOTER.html"
 | 
				
			||||||
      - filter: "/pub/events/"
 | 
					        - filter: "/pub/events/"
 | 
				
			||||||
        params:
 | 
					          params:
 | 
				
			||||||
          - "mp4"
 | 
					            - "mp4"
 | 
				
			||||||
          - "mp4_buffer_size 1m"
 | 
					            - "mp4_buffer_size 1m"
 | 
				
			||||||
          - "mp4_max_buffer_size 5m"
 | 
					            - "mp4_max_buffer_size 5m"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,12 @@ interfaces:
 | 
				
			||||||
  srv: ens19
 | 
					  srv: ens19
 | 
				
			||||||
 | 
					
 | 
				
			||||||
loc_certbot:
 | 
					loc_certbot:
 | 
				
			||||||
  domains: "irc.crans.org"
 | 
					  - dns_rfc2136_server: '172.16.10.147'
 | 
				
			||||||
 | 
					    dns_rfc2136_name: certbot_challenge.
 | 
				
			||||||
 | 
					    dns_rfc2136_secret: "{{ vault_certbot_dns_secret }}"
 | 
				
			||||||
 | 
					    mail: root@crans.org
 | 
				
			||||||
 | 
					    certname: crans.org
 | 
				
			||||||
 | 
					    domains: "irc.crans.org"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
loc_nginx:
 | 
					loc_nginx:
 | 
				
			||||||
  service_name: "thelounge"
 | 
					  service_name: "thelounge"
 | 
				
			||||||
| 
						 | 
					@ -12,7 +17,8 @@ loc_nginx:
 | 
				
			||||||
    - server_name:
 | 
					    - server_name:
 | 
				
			||||||
        - "irc.crans.org"
 | 
					        - "irc.crans.org"
 | 
				
			||||||
        - "irc"
 | 
					        - "irc"
 | 
				
			||||||
      ssl: true
 | 
					      default: true
 | 
				
			||||||
 | 
					      ssl: crans.org
 | 
				
			||||||
      locations:
 | 
					      locations:
 | 
				
			||||||
        - filter: "^~ /web/"
 | 
					        - filter: "^~ /web/"
 | 
				
			||||||
          params:
 | 
					          params:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
- hosts: irc
 | 
					- hosts: irc
 | 
				
			||||||
  vars:
 | 
					  vars:
 | 
				
			||||||
    certbot: '{{ glob_certbot | default({}) | combine(loc_certbot | default({})) }}'
 | 
					    certbot: '{{ loc_certbot | default(glob_certbot | default([])) }}'
 | 
				
			||||||
    nginx: '{{ glob_nginx | default({}) | combine(loc_nginx | default({})) }}'
 | 
					    nginx: '{{ glob_nginx | default({}) | combine(loc_nginx | default({})) }}'
 | 
				
			||||||
    thelounge: '{{ glob_thelounge | default({}) | combine(loc_thelounge | default({})) }}'
 | 
					    thelounge: '{{ glob_thelounge | default({}) | combine(loc_thelounge | default({})) }}'
 | 
				
			||||||
  roles:
 | 
					  roles:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,10 @@
 | 
				
			||||||
      default_url: "https://lists.crans.org/"
 | 
					      default_url: "https://lists.crans.org/"
 | 
				
			||||||
      default_host: "lists.crans.org"
 | 
					      default_host: "lists.crans.org"
 | 
				
			||||||
      default_language: "fr"
 | 
					      default_language: "fr"
 | 
				
			||||||
 | 
					      custom_logo: "crans_icon_dark.svg"
 | 
				
			||||||
 | 
					      custom_logo_name: "crans.svg"
 | 
				
			||||||
 | 
					      custom_logo_url: "https://www.crans.org/"
 | 
				
			||||||
 | 
					      custom_logo_alt: "CRANS"
 | 
				
			||||||
    spamassassin: "SpamAssassin_crans"
 | 
					    spamassassin: "SpamAssassin_crans"
 | 
				
			||||||
    smtphost: "smtp.adm.crans.org"
 | 
					    smtphost: "smtp.adm.crans.org"
 | 
				
			||||||
    mynetworks: ['138.231.0.0/16', '185.230.76.0/22', '2a0c:700:0::/40']
 | 
					    mynetworks: ['138.231.0.0/16', '185.230.76.0/22', '2a0c:700:0::/40']
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,16 +7,22 @@
 | 
				
			||||||
  retries: 3
 | 
					  retries: 3
 | 
				
			||||||
  until: apt_result is succeeded
 | 
					  until: apt_result is succeeded
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- name: Copy snippets
 | 
					- name: Copy proxypass snippets
 | 
				
			||||||
  template:
 | 
					  template:
 | 
				
			||||||
    src: "nginx/snippets/{{ item }}.j2"
 | 
					    src: "nginx/snippets/options-proxypass.conf.j2"
 | 
				
			||||||
    dest: "/etc/nginx/snippets/{{ item }}"
 | 
					    dest: "/etc/nginx/snippets/options-proxypass.conf"
 | 
				
			||||||
    owner: root
 | 
					    owner: root
 | 
				
			||||||
    group: root
 | 
					    group: root
 | 
				
			||||||
    mode: 0644
 | 
					    mode: 0644
 | 
				
			||||||
  loop:
 | 
					
 | 
				
			||||||
    - options-ssl.conf
 | 
					- name: Copy SSL snippets
 | 
				
			||||||
    - options-proxypass.conf
 | 
					  template:
 | 
				
			||||||
 | 
					    src: "nginx/snippets/options-ssl.conf.j2"
 | 
				
			||||||
 | 
					    dest: "/etc/nginx/snippets/options-ssl.{{ item.name }}.conf"
 | 
				
			||||||
 | 
					    owner: root
 | 
				
			||||||
 | 
					    group: root
 | 
				
			||||||
 | 
					    mode: 0644
 | 
				
			||||||
 | 
					  loop: "{{ nginx.ssl }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- name: Copy dhparam
 | 
					- name: Copy dhparam
 | 
				
			||||||
  template:
 | 
					  template:
 | 
				
			||||||
| 
						 | 
					@ -98,12 +104,6 @@
 | 
				
			||||||
    group: www-data
 | 
					    group: www-data
 | 
				
			||||||
    mode: 0644
 | 
					    mode: 0644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- name: Indicate role in motd
 | 
					 | 
				
			||||||
  template:
 | 
					 | 
				
			||||||
    src: update-motd.d/05-service.j2
 | 
					 | 
				
			||||||
    dest: /etc/update-motd.d/05-nginx
 | 
					 | 
				
			||||||
    mode: 0755
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- name: Install passwords
 | 
					- name: Install passwords
 | 
				
			||||||
  when: nginx.auth_passwd|length > 0
 | 
					  when: nginx.auth_passwd|length > 0
 | 
				
			||||||
  template:
 | 
					  template:
 | 
				
			||||||
| 
						 | 
					@ -119,3 +119,9 @@
 | 
				
			||||||
    owner: www-data
 | 
					    owner: www-data
 | 
				
			||||||
    group: www-data
 | 
					    group: www-data
 | 
				
			||||||
    mode: 0644
 | 
					    mode: 0644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Indicate role in motd
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    src: update-motd.d/05-service.j2
 | 
				
			||||||
 | 
					    dest: /etc/update-motd.d/05-nginx
 | 
				
			||||||
 | 
					    mode: 0755
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ upstream {{ upstream.name }} {
 | 
				
			||||||
server {
 | 
					server {
 | 
				
			||||||
    listen 443 default_server ssl;
 | 
					    listen 443 default_server ssl;
 | 
				
			||||||
    listen [::]:443 default_server ssl;
 | 
					    listen [::]:443 default_server ssl;
 | 
				
			||||||
    include "/etc/nginx/snippets/options-ssl.conf";
 | 
					    include "/etc/nginx/snippets/options-ssl.{{ nginx.default_ssl_domain }}.conf";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    server_name _;
 | 
					    server_name _;
 | 
				
			||||||
    charset utf-8;
 | 
					    charset utf-8;
 | 
				
			||||||
| 
						 | 
					@ -55,8 +55,8 @@ server {
 | 
				
			||||||
{% if server.ssl is defined and server.ssl -%}
 | 
					{% if server.ssl is defined and server.ssl -%}
 | 
				
			||||||
# Redirect HTTP to HTTPS
 | 
					# Redirect HTTP to HTTPS
 | 
				
			||||||
server {
 | 
					server {
 | 
				
			||||||
    listen 80;
 | 
					    listen 80{% if server.default is defined and server.default %} default_server{% endif %};
 | 
				
			||||||
    listen [::]:80;
 | 
					    listen [::]:80{% if server.default is defined and server.default %} default_server{% endif %};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    server_name {{ server.server_name|join(" ") }};
 | 
					    server_name {{ server.server_name|join(" ") }};
 | 
				
			||||||
    charset utf-8;
 | 
					    charset utf-8;
 | 
				
			||||||
| 
						 | 
					@ -72,9 +72,9 @@ server {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
server {
 | 
					server {
 | 
				
			||||||
    {% if server.ssl is defined and server.ssl -%}
 | 
					    {% if server.ssl is defined and server.ssl -%}
 | 
				
			||||||
    listen 443 ssl;
 | 
					    listen 443{% if server.default is defined and server.default %} default_server{% endif %} ssl;
 | 
				
			||||||
    listen [::]:443 ssl;
 | 
					    listen [::]:443{% if server.default is defined and server.default %} default_server{% endif %} ssl;
 | 
				
			||||||
    include "/etc/nginx/snippets/options-ssl.conf";
 | 
					    include "/etc/nginx/snippets/options-ssl.{{ server.ssl }}.conf";
 | 
				
			||||||
    {% else -%}
 | 
					    {% else -%}
 | 
				
			||||||
    listen 80 default;
 | 
					    listen 80 default;
 | 
				
			||||||
    listen [::]:80 default;
 | 
					    listen [::]:80 default;
 | 
				
			||||||
| 
						 | 
					@ -86,29 +86,21 @@ server {
 | 
				
			||||||
    # Hide Nginx version
 | 
					    # Hide Nginx version
 | 
				
			||||||
    server_tokens off;
 | 
					    server_tokens off;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {% if server.root is defined -%}
 | 
					    {% if server.root is defined %}root {{ server.root }};{% endif %}
 | 
				
			||||||
    root {{ server.root }};
 | 
					    {% if server.index is defined %}index {{ server.index|join(" ") }};{% endif %}
 | 
				
			||||||
    {% endif -%}
 | 
					 | 
				
			||||||
    {% if server.index is defined -%}
 | 
					 | 
				
			||||||
    index {{ server.index|join(" ") }};
 | 
					 | 
				
			||||||
    {% endif -%}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {% if server.access_log is defined -%}
 | 
					    {% if server.access_log is defined %}access_log {{ server.access_log }};{% endif %}
 | 
				
			||||||
    access_log {{ server.access_log }};
 | 
					    {% if server.error_log is defined %}error_log {{ server.error_log }};{% endif %}
 | 
				
			||||||
    {% endif -%}
 | 
					 | 
				
			||||||
    {% if server.error_log is defined -%}
 | 
					 | 
				
			||||||
    error_log {{ server.error_log }};
 | 
					 | 
				
			||||||
    {% endif -%}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {% if server.locations is defined -%}
 | 
					{% if server.locations is defined %}
 | 
				
			||||||
 | 
					{% for location in server.locations %}
 | 
				
			||||||
    {% for location in server.locations -%}
 | 
					 | 
				
			||||||
    location {{ location.filter }} {
 | 
					    location {{ location.filter }} {
 | 
				
			||||||
        {% for param in location.params -%}
 | 
					{% for param in location.params %}
 | 
				
			||||||
        {{ param }};
 | 
					        {{ param }};
 | 
				
			||||||
        {% endfor -%}
 | 
					{% endfor %}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    {% endfor -%}
 | 
					
 | 
				
			||||||
{% endif -%}
 | 
					{% endfor %}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
{% endfor %}
 | 
					{% endfor %}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
{{ ansible_header | comment }}
 | 
					{{ ansible_header | comment }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ssl_certificate {{ nginx.ssl.cert }};
 | 
					ssl_certificate {{ item.cert }};
 | 
				
			||||||
ssl_certificate_key {{ nginx.ssl.cert_key }};
 | 
					ssl_certificate_key {{ item.cert_key }};
 | 
				
			||||||
ssl_session_timeout 1d;
 | 
					ssl_session_timeout 1d;
 | 
				
			||||||
ssl_session_cache shared:MozSSL:10m;
 | 
					ssl_session_cache shared:MozSSL:10m;
 | 
				
			||||||
ssl_session_tickets off;
 | 
					ssl_session_tickets off;
 | 
				
			||||||
| 
						 | 
					@ -13,5 +13,5 @@ ssl_prefer_server_ciphers off;
 | 
				
			||||||
# Enable OCSP Stapling, point to certificate chain
 | 
					# Enable OCSP Stapling, point to certificate chain
 | 
				
			||||||
ssl_stapling on;
 | 
					ssl_stapling on;
 | 
				
			||||||
ssl_stapling_verify on;
 | 
					ssl_stapling_verify on;
 | 
				
			||||||
ssl_trusted_certificate {{ nginx.ssl.trusted_cert }};
 | 
					ssl_trusted_certificate {{ item.trusted_cert }};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +0,0 @@
 | 
				
			||||||
#!/usr/bin/tail +14
 | 
					 | 
				
			||||||
{{ ansible_header | comment }}
 | 
					 | 
				
			||||||
[0m> [38;5;82mNGINX[0m a été déployé sur cette machine. Voir [38;5;6m/etc/nginx/[0m.
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue