Estimado @Teraterayuki…
Aquí tienes un ejemplo de configuración de hosts virtuales de Apache2 que funcionan como proxy inverso hacia un socket de dominio Unix en un contenedor de Discourse:
Puerto 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/
# Niveles de registro disponibles: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# También es posible configurar el nivel de registro para módulos específicos, por ejemplo:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Para la mayoría de los archivos de configuración de conf-available/, que están
# habilitados o deshabilitados a nivel global, es posible incluir una línea
# solo para un host virtual particular. Por ejemplo, la siguiente línea
# habilita la configuración de CGI solo para este host,
# después de haber sido deshabilitada globalmente con "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>
Puerto 443
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #habilitar esto después de configurar Let's Encrypt en el proxy inverso
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/
# Niveles de registro disponibles: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# También es posible configurar el nivel de registro para módulos específicos, por ejemplo:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Para la mayoría de los archivos de configuración de conf-available/, que están
# habilitados o deshabilitados a nivel global, es posible incluir una línea
# solo para un host virtual particular. Por ejemplo, la siguiente línea
# habilita la configuración de CGI solo para este host,
# después de haber sido deshabilitada globalmente con "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>
Ten en cuenta amablemente que en esta configuración el proxy utiliza un socket unix, no un websocket (ws).
También ten en cuenta que en esta configuración no necesitas agregar manualmente la información de Let’s Encrypt. Puedes comenzar con esto:
Puerto 80 antes de ejecutar 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/
# Niveles de registro disponibles: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# También es posible configurar el nivel de registro para módulos específicos, por ejemplo:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Para la mayoría de los archivos de configuración de conf-available/, que están
# habilitados o deshabilitados a nivel global, es posible incluir una línea
# solo para un host virtual particular. Por ejemplo, la siguiente línea
# habilita la configuración de CGI solo para este host,
# después de haber sido deshabilitada globalmente con "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
Puerto 443 antes de ejecutar Certbot
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #habilitar esto después de configurar Let's Encrypt en el proxy inverso
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/
# Niveles de registro disponibles: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# También es posible configurar el nivel de registro para módulos específicos, por ejemplo:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Para la mayoría de los archivos de configuración de conf-available/, que están
# habilitados o deshabilitados a nivel global, es posible incluir una línea
# solo para un host virtual particular. Por ejemplo, la siguiente línea
# habilita la configuración de CGI solo para este host,
# después de haber sido deshabilitada globalmente con "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
</IfModule>
Luego, si ejecutas:
certbot -d mysite.mydomain.com
El amigable certbot se encargará de agregar el código SSL necesario por ti.
Después de que nuestro amigo certbot haya agregado su código de configuración y todo funcione como se espera, puedes descomentar esta línea:
#SSLProxyEngine on #habilitar esto después de configurar Let's Encrypt en el proxy inverso
y reiniciar apache2 nuevamente.
Espero que esto ayude, @Teraterayuki.
Cuídate.
Notas finales:
- Ten en cuenta amablemente que no usamos
haproxyen nuestras configuraciones de proxy inverso de apache2.haproxyagrega una capa innecesaria de complejidad con casi ningún beneficio tangible (para nosotros), por lo que ejecutamos apache2 como proxy inverso “de la manera fácil”. Tu experiencia puede variar si deseas usarhaproxy; pero honestamente, no usamoshaproxy(en varias configuraciones de proxy inverso de apache2 en producción) y nunca hemos tenido problemas con apache2 como proxy inverso.
- Si no estás usando
mod_pagespeed``, comenta esas líneas. Sin embargo, si estás ejecutandomod_pagespeed, desactivamod_pagespeed``` por host virtual al hacer proxy inverso hacia Discourse.
Lo mejor para ti… y espero que esto te ayude de alguna manera pequeña.