Estoy intentando ejecutar un servicio Mautic (https://hub.docker.com/r/mautic/mautic) detrás del proxy inverso NGINX en Docker y no puedo entender qué estoy haciendo mal.
Un pequeño preámbulo para presentar mi configuración:
Dado que Mautic escucha en el puerto 80, y ya tengo un contenedor NGINX escuchando en el puerto 80, cambié el puerto 80 a 8081 en los siguientes archivos dentro de la imagen de Mautic:
/etc/apache2/ports.conf
/etc/apache2/sites-available/000-default.conf
Tengo un contenedor NGINX que funciona como proxy inverso en el puerto 80. Tengo lo siguiente en mi contenedor NGINX /etc/nginx/conf.d/default.conf
:
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://site-client:4200;
}
location /api/ {
proxy_pass http://site-api:8055/;
}
location /mautic/ {
proxy_pass http://mautic:8081/;
}
}
Tengo el puerto 8081 para Mautic expuesto en el archivo docker-compose.yml.
Ahora las partes problemáticas:
- Si voy a http://localhost:8081, la URL del navegador cambia a http://localhost:8081/s/dashboard y Mautic funciona bien.
- Sin embargo, si voy a http://localhost/mautic/, la URL del navegador cambia a http://localhost/s/dashboard, lo que me lleva a mi
site-client
servicio. De alguna manera la parte /mautic/ de la URL se perdió aquí. - Entonces, si voy a http://localhost/mautic/s/dashboard, la URL permanece igual y Mautic se carga con un montón de errores ERR_ABORTED 404 (consulte la imagen de la consola de desarrollador de Chrome a continuación). Los encabezados de solicitud para estos archivos muestran que a la URL de solicitud todavía le falta la parte /mautic/ (aunque la incluí manualmente en la URL del navegador), por lo que tiene sentido que esos archivos no se puedan encontrar porque la URL del encabezado de solicitud Está Mal. Pero ¿por qué está mal?
Cómo intenté solucionarlo:
Tuve el mismo problema con mi site-api
servicio, que es un CMS sin cabeza (Directus) basado en Node.js, y lo solucioné configurando su URL pública en http://localhost/api en su configuración. Si voy a http://localhost/api/, este servicio funciona bien. Entonces intenté lo mismo en la configuración de Mautic y configuré su URL pública de http://localhost:8081 a http://localhost/mautic. Ahora, si voy a http://localhost/mautic/, la URL del navegador está configurada correctamente en http://localhost/mautic/s/dashboard, pero sigo obteniendo el mismo resultado como se puede ver en la imagen a continuación.
Este es mi docker-compose.yml con respecto a Mautic y NGINX:
reverse-proxy:
container_name: nginx
build: ./tools/nginx
depends_on:
- site-api
- site-client
- mautic
networks:
- site-api-network
ports:
- 80:80
restart: always
mautic:
image: mautic/mautic:v4
build: ./tools/mautic
container_name: mautic
links:
- mauticdb:mysql
depends_on:
- mauticdb
ports:
- 8081:8081
volumes:
- mautic_data:/var/www/html
environment:
- MAUTIC_DB_HOST=mauticdb
- MYSQL_PORT_3306_TCP=3306
- MAUTIC_DB_USER=root
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_DB_NAME=${MAUTIC_DB_NAME}
- MAUTIC_RUN_CRON_JOBS=true
- MAUTIC_INSTALL_FORCE=true
- MAUTIC_ADMIN_EMAIL=${MAUTIC_ADMIN_EMAIL}
- MAUTIC_ADMIN_PASSWORD=${MAUTIC_ADMIN_PASSWORD}
- MAUTIC_ADMIN_USERNAME=${MAUTIC_ADMIN_USERNAME}
- MAUTIC_ADMIN_FIRSTNAME=${MAUTIC_ADMIN_FIRSTNAME}
- MAUTIC_ADMIN_LASTNAME=${MAUTIC_ADMIN_LASTNAME}
- MAUTIC_TRUSTED_PROXIES=["0.0.0.0/0"]
networks:
- site-api-network
networks:
site-api-network:
driver: bridge
volumes:
mautic_db_data:
driver: local
mautic_data:
driver: local
Este es reverse-proxy
el Dockerfile:
FROM nginx:alpine
RUN rm /etc/nginx/conf.d/*
COPY ./default.conf /etc/nginx/conf.d/
EXPOSE 80
CMD [ "nginx", "-g", "daemon off;" ]
Este es mautic
el Dockerfile:
FROM mautic/mautic:v4
RUN rm /etc/apache2/ports.conf
RUN rm /etc/apache2/sites-available/000-default.conf
COPY ./ports.conf /etc/apache2/
COPY ./000-default.conf /etc/apache2/sites-available
EXPOSE 8081
ports.conf
Archivo de imagen Mautic
Listen 8081
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
000-default.conf
Archivo de imagen Mautic
<VirtualHost *:8081>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Respuesta1
Creo que esto es un problema con mi servicio backend Mautic y no con NGINX. Lo que está sucediendo y algunas soluciones se pueden obtener desde aquí:https://serverfault.com/a/797006
Elegí una solución en la que apunto un subdominio a mi servicio en lugar de ser una subruta de un dominio.
Entonces, en lugar de intentar acceder a él a través de example.com/mautic/
:
location /mautic/ {
proxy_pass http://mautic:8081/;
}
Creo un bloque de servidor separado server_name
configurado en mautic.example.com
y mi bloque de ubicación dentro de él es:
location / {
proxy_pass http://mautic:8081/;
}