Apache : VirtualHost en Reverse Proxy (HTTPS)
Description
Configuration Apache pour agir comme un reverse proxy sécurisé (HTTPS) vers une application ou un service web tournant sur un port local (par exemple, une application Node.js, un service Docker comme Emby/Jellyfin, etc.). Gère aussi la redirection HTTP vers HTTPS et potentiellement les WebSockets.
Points Clés : Remplacez service.example.com
par votre sous-domaine/domaine et localhost:BACKEND_PORT
par l'adresse et le port corrects de votre service interne. Assurez-vous que les modules Apache nécessaires (proxy
, proxy_http
, proxy_wstunnel
, rewrite
, headers
, ssl
) sont activés.
Code
# /etc/apache2/sites-available/service.example.com.conf
# Redirection HTTP vers HTTPS (identique à l'exemple précédent)
<VirtualHost *:80>
ServerName service.example.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>
# Configuration Reverse Proxy pour HTTPS (port 443)
<VirtualHost *:443>
ServerName service.example.com
# ServerAdmin webmaster@example.com # Optionnel
# Configuration SSL (identique à l'exemple précédent)
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/service.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/service.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
# Logs
ErrorLog ${APACHE_LOG_DIR}/service.example.com-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/service.example.com-ssl-access.log combined
# --- Configuration du Reverse Proxy ---
# Activer la préservation de l'en-tête Host original
ProxyPreserveHost On
# Rediriger les requêtes HTTP vers le service backend
# Remplacez localhost:BACKEND_PORT par l'adresse et le port de votre service interne
ProxyPass / http://localhost:BACKEND_PORT/
ProxyPassReverse / http://localhost:BACKEND_PORT/
# Configuration spécifique pour les WebSockets (si nécessaire par le backend)
# Adapter le chemin (ex: /socket.io/) et le port si différent
<IfModule mod_proxy_wstunnel.c>
RewriteEngine on
# Condition pour détecter une requête de mise à niveau WebSocket
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
# Règle pour rediriger la requête WebSocket vers le backend via le protocole ws://
RewriteRule ^/?(.*) ws://localhost:BACKEND_PORT/$1 [P,L]
</IfModule>
# --- Sécurité et autres options ---
<Location />
Require all granted
</Location>
# En-têtes de sécurité (identiques ou adaptés de l'exemple précédent)
<IfModule mod_headers.c>
# ... (Copier les en-têtes de l'exemple précédent ici) ...
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" # Activer HSTS après tests !
</IfModule>
</VirtualHost>