Files
TX/docker/nginx.conf
T
riyadhafraa b84fe4e5c7 Update caching headers to ensure all devices get the latest site version
Modify Nginx configuration to include aggressive caching headers for service worker and index.html to prevent stale content on various devices.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 5c11d21b-1972-4651-a7a2-5deab7b263d1
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/c3c252e4-c83d-40ca-9fff-99a3ea60701e/77cfe984-2c65-4152-bb7a-0df28274fe66/IO8TMSC
Replit-Helium-Checkpoint-Created: true
2026-05-19 20:17:47 +00:00

71 lines
2.2 KiB
Nginx Configuration File

upstream tx_api {
server api:8080;
}
server {
listen 80;
server_name _;
client_max_body_size 50m;
# WebSocket / Socket.IO upgrade for /api/socket.io
location /api/socket.io/ {
proxy_pass http://tx_api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
# Forward all /api requests to the Node API server
location /api/ {
proxy_pass http://tx_api;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
# Static SPA assets with hashed filenames — cache aggressively
location /assets/ {
root /usr/share/nginx/html;
expires 1y;
access_log off;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
# Service worker MUST never be cached so we can ship SW updates.
# Safari/iOS especially clings to old sw.js otherwise.
location = /sw.js {
root /usr/share/nginx/html;
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0";
add_header Pragma "no-cache";
add_header Expires "0";
try_files $uri =404;
}
# SPA fallback — every unknown path returns index.html.
# `no-cache` alone is unreliable on iOS Safari (sometimes the browser
# serves a stale copy after a deploy). Pair it with `no-store` + the
# legacy `Pragma`/`Expires` headers so every device — phones, iPads,
# laptops — re-fetches index.html and picks up the freshly-hashed
# assets/*.js bundle on every navigation.
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0";
add_header Pragma "no-cache";
add_header Expires "0";
}
}