ServerAdmin webmaster@your-part.de ServerName your-part.de ServerAlias www.your-part.de DocumentRoot /opt/yourpart/frontend/dist DirectoryIndex index.html # Frontend statische Dateien AllowOverride None Options -Indexes +FollowSymLinks Require all granted # Fallback für Vue Router FallbackResource /index.html # www Redirect (muss zuerst kommen, damit WebSocket-Regeln nicht beeinflusst werden) RewriteEngine on RewriteCond %{SERVER_NAME} =your-part.de RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] # Proxy-Einstellungen ProxyPreserveHost On ProxyRequests Off RequestHeader set X-Forwarded-Proto "https" AllowEncodedSlashes NoDecode # WebSocket-Upgrade mit RewriteRule (muss VOR ProxyPass stehen!) # WebSocket-Upgrade für Socket.io RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/socket.io/(.*)$ "ws://localhost:2020/socket.io/$1" [P,L] # WebSocket-Upgrade für Daemon RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/ws/(.*)$ "ws://localhost:4551/$1" [P,L] # API-Requests an Backend weiterleiten ProxyPass "/api/" "http://localhost:2020/api/" ProxyPassReverse "/api/" "http://localhost:2020/api/" # HTTP-Proxy für Socket.io (Fallback für Polling) ProxyPass "/socket.io/" "http://localhost:2020/socket.io/" ProxyPassReverse "/socket.io/" "http://localhost:2020/socket.io/" # HTTP-Proxy für Daemon (Fallback, sollte eigentlich nicht benötigt werden) ProxyPass "/ws/" "http://localhost:4551/" ProxyPassReverse "/ws/" "http://localhost:4551/" ErrorLog /var/log/apache2/yourpart.error.log CustomLog /var/log/apache2/yourpart.access.log combined HostnameLookups Off UseCanonicalName Off ServerSignature On # SSL-Konfiguration Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/www.your-part.de/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.your-part.de/privkey.pem