# ============================================================ # Apache — VirtualHost production pour Univers Group # Pour hébergement mutualisé (cPanel, o2switch...) ou VPS Apache # # Sur VPS Ubuntu : # sudo cp apache.conf /etc/apache2/sites-available/univers-group.sn.conf # sudo a2enmod rewrite headers ssl expires deflate # sudo a2ensite univers-group.sn # sudo systemctl reload apache2 # ============================================================ # Redirection HTTP → HTTPS ServerName univers-group.sn ServerAlias www.univers-group.sn # Let's Encrypt challenge Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/ RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # Serveur principal HTTPS ServerName univers-group.sn ServerAlias www.univers-group.sn DocumentRoot /var/www/univers-group/public # ── SSL (Certbot / Let's Encrypt) ─────────────────────── SSLEngine on SSLCertificateFile /etc/letsencrypt/live/univers-group.sn/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/univers-group.sn/privkey.pem SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite HIGH:!aNULL:!MD5 SSLHonorCipherOrder off # ── Logs ──────────────────────────────────────────────── ErrorLog /var/log/apache2/univers-group.error.log CustomLog /var/log/apache2/univers-group.access.log combined # ── Taille maximale des uploads ────────────────────────── LimitRequestBody 52428800 # ── En-têtes de sécurité ──────────────────────────────── Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" ServerTokens Prod # ── Bloquer dossier install ────────────────────────────── Require all denied # ── Répertoire public Laravel ──────────────────────────── Options -Indexes -MultiViews +FollowSymLinks AllowOverride All Require all granted # Cache assets Vite (hash dans le nom de fichier) ExpiresActive On ExpiresDefault "access plus 1 year" Header append Cache-Control "public, immutable" # ── Compression Gzip ──────────────────────────────────── AddOutputFilterByType DEFLATE \ application/javascript \ application/json \ text/css \ text/html \ text/plain \ text/xml \ image/svg+xml # ── PHP-FPM (si installé) ──────────────────────────────── # Décommentez si vous utilisez PHP-FPM via Apache : # # SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost" #