Discusión detrás de proxy inverso y HTTPS

Logré que Apache2 funcionara “sin problemas” en un entorno de prueba con Apache2 actuando como proxy inverso hacia un socket Unix en el contenedor:

La única diferencia que encontré (nota: solo unas pocas horas de pruebas, nada exhaustivo) fue:

  • Apache2 no funcionará con un enlace simbólico al socket Unix en el volumen compartido dentro del contenedor;
  • Apache2 fue un poco más lento en una prueba aproximada, pero no por mucho.

Personalmente, no soy fanático de las guerras religiosas sobre tecnologías; por lo tanto, discrepo con la afirmación de que “Apache2 te dará muchos problemas”. No experimenté ningún problema negativo con Apache2 durante mis pruebas.

Aquí está la configuración central que utilicé con Apache2 (HTTP, funcionó perfectamente con LETSENCRYPT, por cierto):

# cat discourse.example.conf
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName  discourse.example.com
  DocumentRoot /website/discourse

  RewriteEngine On
  ProxyPreserveHost On
  ProxyRequests Off
  ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
  ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
  ErrorLog /var/log/apache2/discourse.error.log
  LogLevel warn
  CustomLog /var/log/apache2/discourse.access.log combined

  RewriteCond %{SERVER_NAME} =discourse.example.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Nota: La única vez que experimentamos problemas con la entrega de HTTP incluso cuando force_https estaba configurado fue cuando faltaban archivos en el directorio /uploads, pero esto (por supuesto) no está relacionado con Apache2 frente a nginx como proxy inverso.