# Apache-Konfiguration für tt-tagebuch.de mit WebSocket-Support # # WICHTIG: Folgende Module müssen aktiviert sein: # sudo a2enmod proxy # sudo a2enmod proxy_http # sudo a2enmod proxy_wstunnel # sudo a2enmod rewrite # sudo a2enmod headers # sudo systemctl restart apache2 ServerName tt-tagebuch.de ServerAlias www.tt-tagebuch.de DocumentRoot /var/www/tt-tagebuch.de Options Indexes FollowSymLinks AllowOverride All Require all granted ErrorLog ${APACHE_LOG_DIR}/tt-tagebuch.de_error.log CustomLog ${APACHE_LOG_DIR}/tt-tagebuch.de_access.log combined SSLEngine on SSLCertificateFile /etc/letsencrypt/live/tt-tagebuch.de/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/tt-tagebuch.de/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf ProxyRequests Off # WebSocket-Proxy für Socket.IO # WICHTIG: Diese LocationMatch muss VOR den anderen ProxyPass-Direktiven stehen # WICHTIG: mod_proxy_wstunnel muss aktiviert sein (sudo a2enmod proxy_wstunnel) # WICHTIG: mod_rewrite muss aktiviert sein (sudo a2enmod rewrite) # # HINWEIS: Seit Apache 2.4.47 kann mod_proxy_http WebSockets direkt verarbeiten. # Falls die RewriteRule nicht funktioniert, verwende die alternative Konfiguration unten. # WebSocket-Upgrade erkennen und weiterleiten (wss:// -> ws://) # Verwende RewriteRule, um WebSocket-Upgrades zu erkennen und weiterzuleiten RewriteEngine on RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/socket\.io/?(.*) ws://localhost:3050/socket.io/$1 [P,L,QSA] # Fallback für HTTP-Polling (wird verwendet, wenn RewriteRule nicht greift) ProxyPass http://localhost:3050/socket.io/ ProxyPassReverse http://localhost:3050/socket.io/ ProxyPreserveHost On ProxyAddHeaders On RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Real-IP %{REMOTE_ADDR}s RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s # ALTERNATIVE: Direkte ProxyPass-Konfiguration (funktioniert ab Apache 2.4.47) # Falls die RewriteRule nicht funktioniert, kommentiere die obige LocationMatch aus # und verwende stattdessen diese Konfiguration: # ProxyPass /socket.io/ ws://localhost:3050/socket.io/ # ProxyPassReverse /socket.io/ ws://localhost:3050/socket.io/ # ProxyPass /socket.io/ http://localhost:3050/socket.io/ # ProxyPassReverse /socket.io/ http://localhost:3050/socket.io/ # Timeout für alle Proxy-Verbindungen (außerhalb von LocationMatch) ProxyTimeout 3600 # API-Routen ProxyPass /api http://localhost:3050/api ProxyPassReverse /api http://localhost:3050/api # Alle anderen Anfragen an den Backend-Server (für Frontend) ProxyPass / http://localhost:3050/ ProxyPassReverse / http://localhost:3050/