Je veux installer en utilisant un proxy inverse pour Apache

Cher @Teraterayuki,

Voici un exemple de jeu de serveurs virtuels Apache2 fonctionnels pour un proxy inverse vers une socket Unix dans un conteneur Discourse :

Port 80

<VirtualHost *:80>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors.log
        CustomLog ${APACHE_LOG_DIR}/community.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =mysite.mydomain.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Port 443

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        #SSLProxyEngine on   #activez ceci après la configuration de Let's Encrypt sur le proxy inverse
        RewriteEngine On
        
        RewriteCond %{HTTP_USER_AGENT}  (Bytespider|Yandex|Wget|seocompany|CCBot|Cincraw) [NC]
        RewriteRule . - [R=403,L]

        ProxyPreserveHost On
        ProxyRequests Off
        RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
        RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/
        ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
        SSLCertificateFile /etc/letsencrypt/live/mysite.mydomain.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mysite.mydomain.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

@Teraterayuki

Veuillez noter que dans cette configuration, le proxy utilise une socket Unix et non une websocket (ws).

Notez également que dans cette configuration, vous n’avez pas besoin d’ajouter manuellement les informations Let’s Encrypt. Vous pouvez commencer par ceci :

Port 80 avant d’exécuter Certbot

<VirtualHost *:80>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors.log
        CustomLog ${APACHE_LOG_DIR}/community.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
     
</VirtualHost>

Port 443 avant d’exécuter Certbot

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        #SSLProxyEngine on   #activez ceci après la configuration de Let's Encrypt sur le proxy inverse
        RewriteEngine On


        ProxyPreserveHost On
        ProxyRequests Off
        RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
        RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/
        ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        # Niveaux de journalisation disponibles : trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # Il est également possible de configurer le niveau de journalisation pour des modules spécifiques, par exemple :
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined

        # Pour la plupart des fichiers de configuration issus de conf-available/, activés ou désactivés au niveau global,
        # il est possible d'inclure une ligne uniquement pour un serveur virtuel particulier. Par exemple,
        # la ligne suivante active la configuration CGI uniquement pour cet hôte,
        # après qu'elle a été désactivée globalement avec "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off

</VirtualHost>
</IfModule>

Ensuite, si vous exécutez :

certbot -d mysite.mydomain.com

Le sympathique certbot s’occupera d’ajouter automatiquement le code SSL requis pour vous.

Une fois que notre ami certbot a ajouté son code de configuration et que tout fonctionne comme prévu, vous pouvez décommenter cette ligne :

#SSLProxyEngine on   #activez ceci après la configuration de Let's Encrypt sur le proxy inverse

et redémarrer apache2.

J’espère que cela vous aidera, @Teraterayuki.

Prenez soin de vous.


Remarques de clôture :

  1. Veuillez noter que nous n’utilisons pas haproxy dans nos configurations de proxy inverse Apache2. haproxy ajoute une couche de complexité inutile avec presque aucun avantage tangible (pour nous), nous exécutons donc Apache2 comme proxy inverse « de la manière simple ». YMMV si vous souhaitez utiliser haproxy ; mais honnêtement, nous n’utilisons pas haproxy (sur plusieurs configurations de proxy inverse Apache2 en production) et nous n’avons jamais rencontré de problèmes avec Apache2 en tant que proxy inverse.
  1. Si vous n’utilisez pas mod_pagespeed, commentez ces lignes. Cependant, si vous exécutez mod_pagespeed, désactivez mod_pagespeed par serveur virtuel lors de la mise en proxy inverse vers Discourse.

Meilleurs vœux… et j’espère que cela vous aidera, même de manière modeste.

6 « J'aime »