user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
	worker_connections  1024;
}


http {
	include       /etc/nginx/mime.types;
	default_type  application/octet-stream;

	types {
		application/manifest+json webmanifest;
	}

	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
					  '$status $body_bytes_sent "$http_referer" '
					  '"$http_user_agent" "$http_x_forwarded_for"';

	access_log  /var/log/nginx/access.log  main;

	sendfile        on;
	#tcp_nopush     on;

	keepalive_timeout  65;

	gzip  on;

	gzip_vary on;
	gzip_proxied any;
	gzip_comp_level 6;
	gzip_buffers 16 8k;
	gzip_http_version 1.1;
	gzip_min_length 256;
	gzip_types
		text/plain
		text/css
		application/json
		application/x-javascript
		application/javascript
		text/xml
		application/xml
		application/xml+rss
		text/javascript
		application/vnd.ms-fontobject
		application/x-font-ttf
		font/opentype
		image/svg+xml
		image/x-icon
		audio/wav;

	map_hash_max_size 128;
	map_hash_bucket_size 128;

	# Expires map
	map $sent_http_content_type $expires {
		default                       off;
		text/css                      max;
		application/javascript        max;
		text/javascript               max;
		application/vnd.ms-fontobject max;
		application/x-font-ttf        max;
		font/opentype                 max;
		font/woff2                    max;
		image/svg+xml                 max;
		image/x-icon                  max;
		audio/wav                     max;
		~images/                      max;
		~font/                        max;
	}

	server {
		listen 80;
		listen [::]:80;
		listen 81  default_server http2 proxy_protocol; ## Needed when behind HAProxy with SSL termination + HTTP/2 support
		listen [::]:81 default_server http2 proxy_protocol; ## Needed when behind HAProxy with SSL termination + HTTP/2 support

		server_name  _;

		expires $expires;

		root   /usr/share/nginx/html;

		# all assets contain hash in filename, cache forever
		location ^~ /assets/ {
			add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable";
			try_files $uri =404;
		}

		# all workbox scripts are compiled with hash in filename, cache forever3
		location ^~ /workbox- {
			add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable";
			try_files $uri =404;
		}

		# assume that everything else is handled by the application router, by injecting the index.html.
		location / {
			autoindex off;
			expires off;
			add_header Cache-Control "public, max-age=0, s-maxage=0, must-revalidate" always;
			try_files $uri /index.html =404;
		}

		location ~* .(txt|webmanifest|css|js|mjs|map|svg|jpg|jpeg|png|ico|ttf|woff|woff2|wav)$ {
			try_files $uri $uri/ =404;
		}

		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
		}
	}
}
