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 :
- 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.
- 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.