---
|
|
- name: 'configure nginx tcp 443 forwarder'
|
|
blockinfile:
|
|
dest: '/etc/nginx/nginx.conf'
|
|
block: |
|
|
stream {
|
|
# Get upstream $name rom TLS SNI Header
|
|
map $ssl_preread_server_name $name {
|
|
include /etc/nginx/map.conf.d/*.conf;
|
|
}
|
|
|
|
# Include upstream definitions
|
|
include /etc/nginx/upstream.conf.d/*.conf;
|
|
|
|
log_format stream_routing '$remote_addr [$time_local] '
|
|
'with SNI name "$ssl_preread_server_name" '
|
|
'proxying to "$name" '
|
|
'$protocol $status $bytes_sent $bytes_received '
|
|
'$session_time';
|
|
|
|
server {
|
|
listen {{ public_ip }}:443;
|
|
|
|
# Inspect TLS Headers
|
|
ssl_preread on;
|
|
# Proxy connection to upstream $name
|
|
proxy_pass $name;
|
|
|
|
# Log connection
|
|
access_log /var/log/nginx/stream_443.log stream_routing;
|
|
|
|
# If on send PROXY Protocol headers to EVERY upstream
|
|
# servers. WARNING: It will break connection to upstreams
|
|
# not configured to accept PROXY Protocol!
|
|
proxy_protocol {{ 'on' if proxy_protocol else 'off' }};
|
|
}
|
|
}
|
|
|
|
delegate_to: 'reverse_proxy'
|
|
notify: 'reload nginx'
|
|
|
|
- name: 'configure nginx http 80 forwarder'
|
|
lineinfile:
|
|
dest: '/etc/nginx/nginx.conf'
|
|
insertafter: '^http {'
|
|
line: 'include /etc/nginx/http.conf.d/*.conf;'
|
|
delegate_to: 'reverse_proxy'
|
|
notify: 'reload nginx'
|
|
|
|
- name: 'create configuration directories for sites'
|
|
file:
|
|
state: 'directory'
|
|
dest: '/etc/nginx/{{ item }}'
|
|
delegate_to: 'reverse_proxy'
|
|
notify: 'reload nginx'
|
|
loop:
|
|
- 'http.conf.d'
|
|
- 'map.conf.d'
|
|
- 'upstream.conf.d'
|
|
|
|
- name: 'configure http proxy for https redirect and acme challenge'
|
|
template:
|
|
src: 'http.conf.j2'
|
|
dest: '/etc/nginx/http.conf.d/{{ ansible_hostname }}.conf'
|
|
delegate_to: 'reverse_proxy'
|
|
notify: 'reload nginx'
|
|
|
|
- name: 'configure upstream server spec'
|
|
copy:
|
|
content: |
|
|
upstream {{ ansible_hostname }}_https {
|
|
server {{ hostvars|ip_from_inventory(ansible_hostname) }}:{{
|
|
"10443" if proxy_protocol else "443"
|
|
}};
|
|
}
|
|
dest: '/etc/nginx/upstream.conf.d/{{ ansible_hostname }}.conf'
|
|
delegate_to: 'reverse_proxy'
|
|
notify: 'reload nginx'
|
|
|
|
- name: 'configure sni-upstream mapping'
|
|
copy:
|
|
content: |
|
|
{% for server_fqdn in server_fqdns %}
|
|
{{ server_fqdn }} {{ ansible_hostname }}_https;
|
|
{% endfor %}
|
|
dest: '/etc/nginx/map.conf.d/{{ ansible_hostname }}.conf'
|
|
delegate_to: 'reverse_proxy'
|
|
notify: 'reload nginx'
|
|
|
|
|
|
|