Apache : VirtualHost en Reverse Proxy (HTTPS)

Catégorie: Apache Conf | Langage: ApacheConf

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>