# Oliver Metadata Tool v4.0 - Apache Configuration
# Location: /etc/apache2/sites-available/solventum-image-metadata.conf
#
# Enable with:
# sudo a2ensite solventum-image-metadata
# sudo a2enmod proxy proxy_http headers rewrite ssl
# sudo systemctl reload apache2
ServerName ai-sandbox.oliver.solutions
# Redirect HTTP to HTTPS
Redirect permanent / https://ai-sandbox.oliver.solutions/
ServerName ai-sandbox.oliver.solutions
# SSL Configuration
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/ai-sandbox.oliver.solutions/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ai-sandbox.oliver.solutions/privkey.pem
# 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"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# =========================================================================
# Frontend - React SPA (Static Files)
# =========================================================================
# Serve static files from /var/www/html/solventum-image-metadata
DocumentRoot /var/www/html/solventum-image-metadata
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
# Enable React Router (SPA routing)
RewriteEngine On
RewriteBase /solventum-image-metadata
# Don't rewrite files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Don't rewrite API calls
RewriteCond %{REQUEST_URI} !^/solventum-image-metadata/api/
# Rewrite everything else to index.html
RewriteRule ^ /solventum-image-metadata/index.html [L]
# Cache static assets
Header set Cache-Control "public, max-age=31536000"
# Don't cache HTML
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
# =========================================================================
# Backend API - FastAPI (Reverse Proxy)
# =========================================================================
# Proxy API requests to FastAPI backend
ProxyPreserveHost On
ProxyTimeout 600
# API endpoints
ProxyPass http://localhost:8000
ProxyPassReverse http://localhost:8000
# Headers for backend
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}s"
RequestHeader set X-Real-IP "%{REMOTE_ADDR}s"
# Allow large file uploads (500MB)
LimitRequestBody 524288000
# =========================================================================
# Logs
# =========================================================================
ErrorLog ${APACHE_LOG_DIR}/solventum-image-metadata-error.log
CustomLog ${APACHE_LOG_DIR}/solventum-image-metadata-access.log combined
# Log level (debug for troubleshooting, warn for production)
LogLevel warn
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet