veza/config/incus/apache/veza-web.conf
senke f0ba7de543 state-ownership: delete unused optimisticStoreUpdates.ts file
- Deleted apps/web/src/utils/optimisticStoreUpdates.ts (unused file)
- File was unused - no imports found in codebase
- Mutations already use React Query's onMutate pattern
- No TypeScript errors after deletion
- Actions 4.4.1.2 and 4.4.1.3 complete
2026-01-15 19:26:53 +01:00

86 lines
3.4 KiB
Text

<VirtualHost *:80>
ServerName veza-web
DocumentRoot /var/www/html
# Logging
ErrorLog ${APACHE_LOG_DIR}/veza-web-error.log
CustomLog ${APACHE_LOG_DIR}/veza-web-access.log combined
# Security headers
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
# Gzip compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
</IfModule>
# Serve static files
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
# React Router - serve index.html for all routes
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</Directory>
# CRITICAL FIX: No-cache headers for JS chunks to prevent React.Children errors
# JS chunks must always be fetched fresh to avoid cache conflicts
<LocationMatch "^/js/.*\.js$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
Header set X-Content-Type-Options "nosniff"
</LocationMatch>
# CRITICAL FIX: No-cache for Service Worker to prevent old SW from serving cached chunks
<LocationMatch "^/sw\.js$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</LocationMatch>
# CRITICAL FIX: No-cache for index.html to ensure latest chunks are referenced
<LocationMatch "^/index\.html$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</LocationMatch>
# Cache static assets (images, fonts, CSS) - but NOT JS chunks
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
# CRITICAL: Do NOT cache JavaScript files - they must be fresh
# ExpiresByType application/javascript "access plus 1 year"
# ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/eot "access plus 1 year"
</IfModule>
# API proxy (optional - can be handled by HAProxy)
# ProxyPass /api/ http://10.10.10.2:8080/api/
# ProxyPassReverse /api/ http://10.10.10.2:8080/api/
# WebSocket proxy for chat (optional - can be handled by HAProxy)
# ProxyPass /ws/ ws://10.10.10.3:8081/ws/
# ProxyPassReverse /ws/ ws://10.10.10.3:8081/ws/
# WebSocket proxy for stream (optional - can be handled by HAProxy)
# ProxyPass /stream/ ws://10.10.10.4:3002/stream/
# ProxyPassReverse /stream/ ws://10.10.10.4:3002/stream/
</VirtualHost>