user www-data; events { } http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } charset utf-8; include mime.types; types { # Custom types for ebooks. application/x-mobipocket-ebook mobi; application/epub+zip epub; } error_page 502 /error/50x.html; error_page 503 /error/50x.html; error_page 504 /error/50x.html; server { location ^~ /error/ { internal; alias /var/www/; } location /favicon.ico { alias /opt/wrolpi/icon.ico; } location /apple-touch-icon.png { alias /opt/wrolpi/icon.png; } location /epub.html { alias /opt/wrolpi/app/public/epub.html; } location / { # React APP proxy_pass http://127.0.0.1:5000; rewrite $1 break; } location /sockjs-node { proxy_pass http://127.0.0.1:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } location /api { proxy_pass http://127.0.0.1:8081; rewrite /^api(.*)$ $1 break; } location /docs { proxy_pass http://127.0.0.1:8081; rewrite /^docs(.*)$ $1 break; } location /media { # The media files mounted in the docker volume sendfile on; sendfile_max_chunk 1m; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; autoindex on; autoindex_exact_size off; alias /media/wrolpi; } location /download { # Assume any request here is to download a file from the media directory. if ( $request_filename ~ '^.*/(.+)$' ) { # Always include the filename for downloads. add_header Content-Disposition 'attachment; filename="$1"'; } sendfile on; sendfile_max_chunk 1m; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; autoindex on; autoindex_exact_size off; alias /opt/media; } } }