# Apache Virtual Host Configuration for Vision Videoke
# Subdirectory setup at /var/www/html/music
# This configuration allows Vision Videoke to run alongside existing sites
# Add this to your existing Apache virtual host configuration
# or include it in your main site's .htaccess file
# Vision Videoke subdirectory configuration
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
# Enable rewrite engine for React Router
RewriteEngine On
# Handle React Router (SPA) routing
# Redirect all requests to index.html except for actual files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/music/api/
RewriteRule ^(.*)$ /music/index.html [L,QSA]
# Security headers
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
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=31536000; includeSubDomains" env=HTTPS
# CORS headers for API requests
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With"
# Handle preflight OPTIONS requests
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
# Proxy configuration for Node.js backend API
# This forwards API requests to the Node.js application running on port 3001
ProxyPreserveHost On
ProxyPass http://127.0.0.1:3001/api
ProxyPassReverse http://127.0.0.1:3001/api
# WebSocket support (if needed)
RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/music/api/(.*) "ws://127.0.0.1:3001/api/$1" [P,L]
# File upload handling with increased limits
# Increase upload limits
LimitRequestBody 104857600 # 100MB
# Extended timeouts for file uploads
ProxyTimeout 300
ProxyPass http://127.0.0.1:3001/api/upload
ProxyPassReverse http://127.0.0.1:3001/api/upload
# Static file caching for performance
ExpiresActive On
ExpiresDefault "access plus 1 year"
Header append Cache-Control "public, immutable"
# HTML files with short cache
ExpiresActive On
ExpiresDefault "access plus 1 hour"
Header append Cache-Control "public, must-revalidate"
# Gzip compression for better performance
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
# Security: Block access to sensitive files
Require all denied
# Health check endpoint (accessible without authentication)
ProxyPass http://127.0.0.1:3001/health
ProxyPassReverse http://127.0.0.1:3001/health
# Rate limiting (if mod_evasive is available)
DOSHashTableSize 2048
DOSPageCount 10
DOSPageInterval 1
DOSSiteCount 50
DOSSiteInterval 1
DOSBlockingPeriod 600
# Optional: Basic authentication for admin areas
#
# AuthType Basic
# AuthName "Vision Videoke Admin"
# AuthUserFile /etc/apache2/.htpasswd
# Require valid-user
#