map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name ${APP_DOMAIN} ${ADMIN_DOMAIN} ${API_DOMAIN}; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name ${APP_DOMAIN}; ssl_certificate /etc/nginx/certs/server.crt; ssl_certificate_key /etc/nginx/certs/server.key; root /srv/mobile; index index.html; server_tokens off; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy strict-origin-when-cross-origin always; add_header Permissions-Policy "camera=(self), microphone=(self), geolocation=(self)" always; add_header Content-Security-Policy "default-src 'self'; img-src 'self' data: blob: https:; media-src 'self' blob: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; connect-src 'self' https://${API_DOMAIN} wss://${API_DOMAIN}; frame-src https:;" always; location / { try_files $uri $uri/ /index.html; } location ~* \.(?:js|css|png|jpg|jpeg|gif|webp|svg|ico|woff2?)$ { expires 7d; add_header Cache-Control "public, immutable"; try_files $uri =404; } } server { listen 443 ssl http2; server_name ${ADMIN_DOMAIN}; ssl_certificate /etc/nginx/certs/server.crt; ssl_certificate_key /etc/nginx/certs/server.key; root /srv/admin; index index.html; server_tokens off; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy no-referrer always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; add_header X-Frame-Options DENY always; location /admin/v1/ { proxy_pass http://api:8888; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto https; } location = /_app.config.js { expires -1; add_header Cache-Control "no-store, no-cache, must-revalidate"; try_files $uri =404; } location / { try_files $uri $uri/ /index.html; } } server { listen 443 ssl http2; server_name ${API_DOMAIN}; ssl_certificate /etc/nginx/certs/server.crt; ssl_certificate_key /etc/nginx/certs/server.key; server_tokens off; client_max_body_size 16m; location /ws { proxy_pass http://api:8888; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_read_timeout 70s; } location / { proxy_pass http://api:8888; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto https; } }