{% macro proxy(dst, ws=none) %}proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $remote_addr;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header HTTPS $scheme;
		if ($scheme = https ) { set $ssl on; }
		proxy_set_header X-Forwarded-HTTPS $ssl;
		proxy_set_header X-Forwarded-Port $server_port;
{% if ws is true %}		# Для поддержки WebSocket
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade_ws;{% endif %}
		proxy_pass {{ dst }};{% endmacro %}

{% macro listen(domain, cert_domain) %}	listen 80;
	server_name {{ domain }};
	listen	   443 ssl;
	access_log /var/log/nginx/access_@@@domain%%%.log;
	error_log /var/log/nginx/error_@@@domain%%%.log;
	ssl_certificate	 /etc/nginx/ssl/{{ cert_domain }}.crt;
	ssl_certificate_key /etc/nginx/ssl/{{ cert_domain }}.key;
	ssl_session_timeout  5m;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
	ssl_dhparam /etc/nginx/dh4096.pem;
	ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2:!SSL3;
# Чтобы у клиента не было проблем с открытием нестандартных https портов
	error_page 497 @httpsredirect;
	location @httpsredirect {
# Помогает из ws в wss редиретком и должен почмочь с ajax и статикой
		add_header Access-Control-Allow-Origin *;
		return 302 https://$host:$server_port$request_uri;
	}
	if ($scheme = http ) { return 302 https://$host$request_uri; }{% endmacro %}
{% set cert_domain = domain %}
{% if wildcard %}
	{% set cert_domain = domain.split('.', 1)[-1] %}
{% endif %}
# Для поддержки WebSocket, чтобы не проставлять везде Connection: upgrade
# пример из документации https://nginx.org/ru/docs/http/websocket.html
# Если выставлять "proxy_set_header Connection $http_connection;"
# т.е. прозрачно проксировать то, что передает клиент - мы начнем передавать
# и keep-alive, а это может сглючить, т.к. для proxy_pass дефолт Connection: close
map $http_upgrade $connection_upgrade_ws {
	default upgrade;
	'' close;
}

server {
{{ listen(domain, cert_domain) }}

{% if angular_support %}
	# Явно укажем, какие эндпоинты обслуживает бэкенд
	location ~ (/api/.*|/static/.*|/files.*) {
		{{ proxy("http://127.0.0.1:8080") }}
	}

	location /socket.io/ {
		{{ proxy("http://127.0.0.1:8080", true) }}
	}

	location /sockjs-node/ {
		{{ proxy("http://127.0.0.1:8080", true) }}
	}

	location / {
		{{ proxy("http://127.0.0.1:4200") }}
	}
{% else %}
	location / {
		{{ proxy("http://127.0.0.1:8080", true) }}
	}
{% endif %}

	# Веб-формы открываются неавторизованными пользователями
	location ~ (/js/webform/webform.js|/crm/forms/CmfForm:.*|/forms/CmfForm:.*html$|/pub/.*) {
		proxy_set_header X-Forwarded-User $http_authorization;
		{{ proxy("http://127.0.0.1:8080") }}
	}

	location /webdav {
		# 302 редирект здесь приводит к ошибке, чтобы пользовательские программы
		# запрашивали логин-пароль - нужно посылать 401.
		{{ proxy("http://127.0.0.1:8081") }}
	}
}

{% if redirect_from %}
# Предыдущие домены виртуалки (трёхэтапная выдача VM)
server {
{{ listen(" ".join(redirect_from), cert_domain) }}
	return 302 https://{{ domain }}$request_uri;
}
{% endif %}
