user nginx nginx; worker_processes 1; error_log /var/log/nginx/error_log info; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; client_header_timeout 10m; client_body_timeout 10m; send_timeout 10m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 2k; request_pool_size 4k; gzip off; output_buffers 1 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75 20; ignore_invalid_headers on; index index.html; include /etc/nginx/conf.d/*.conf; } # "Auseinanderbasteln" von HTTPS und XMPP auf Port 443 # Der Stream-Server hört an allen Interfaces/IPs auf Port 443 # und leitet per Proxy an $upstream weiter # Upstream wird beim ALPN "xmpp-client" auf xmppserver gemappt, # bei den verschiedenen HTTP-ALPNs auf httpserver, # bei allen anderen ALPNs auf httpserver. # httpserver sind die oben definierten server, # die deswegen nur auf localhost mit Port 8443 hören. # xmppserver ist der TLS-Port für Clients von ejabberd stream { upstream httpserver { server localhost:8443; # webserver_host:webserver_port } upstream xmppserver { server localhost:5223; # xmpp_server_host:xmpp_over_tls_port } upstream turnserver { server localhost:5349; # turnserver_host:turn_over_tls_port } map $ssl_preread_alpn_protocols $upstream { ~\bh2\b httpserver; ~\bhttp/1.1\b httpserver; ~\bh2,http/1.1\b httpserver; ~\bxmpp-client\b xmppserver; default turnserver; } server { listen 443; listen [::]:443; ssl_preread on; proxy_pass $upstream; } }