events {} http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; root /var/www/symfony/public; index index.php; # 🧱 Fichiers statiques Symfony et Vite (build ou proxy) location ~ ^/(bundles|css|js|images|fonts)/ { try_files $uri $uri/ =404; access_log off; expires 1y; add_header Cache-Control "public"; } # 🔁 Proxy vers Vite en mode développement (HMR + assets Vue) location /build/ { proxy_pass http://front:5173/build/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # 🔁 Proxy WebSocket Vite (nécessaire pour HMR) location /@vite/ { proxy_pass http://front:5173/@vite/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location /src/ { proxy_pass http://front:5173/src/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location ~ ^/spa/(manifest\.webmanifest|sw\.js|workbox-.*\.js|.*\.(png|svg|ico))$ { root /var/www/symfony/public; access_log off; try_files $uri =404; } # 🎯 API backend (si appel à /api depuis Vue en dev) location ^~ /api { try_files $uri /index.php$is_args$args; } # 🔄 Fallback Symfony : toutes les routes passées à index.php location / { try_files $uri /index.php$is_args$args; } # 🔁 Redirige toutes les routes SPA vers index.php pour que Vue Router fonctionne location ^~ /spa/ { try_files $uri /index.php$is_args$args; } # 🐘 Fichiers PHP traités par PHP-FPM (le container "php") location ~ \.php$ { include fastcgi_params; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; } # 🧾 Logs access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; } }