Ich versuche, einen Dienst Mautic auszuführen (https://hub.docker.com/r/mautic/mautic) hinter dem NGINX-Reverse-Proxy in Docker und kann nicht herausfinden, was ich falsch mache.
Eine kleine Einleitung zur Vorstellung meines Setups:
Da Mautic auf Port 80 lauscht und ich bereits einen NGINX-Container habe, der auf Port 80 lauscht, habe ich in den folgenden Dateien im Mautic-Image Port 80 in 8081 geändert:
/etc/apache2/ports.conf
/etc/apache2/sites-available/000-default.conf
Ich habe einen NGINX-Container, der als Reverse-Proxy an Port 80 arbeitet. In meinem NGINX-Container befindet sich Folgendes /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/;
}
}
Ich habe Port 8081 für Mautic in der Datei docker-compose.yml freigegeben.
Nun zu den problematischen Teilen:
- Wenn ich zu http://localhost:8081 gehe, ändert sich die URL des Browsers zu http://localhost:8081/s/dashboard und Mautic funktioniert einwandfrei.
- Wenn ich jedoch zu http://localhost/mautic/ gehe, ändert sich die URL des Browsers zu http://localhost/s/dashboard, wodurch ich zu meinem
site-client
Dienst gelange. Irgendwie ist hier der /mautic/-Teil der URL verloren gegangen. - Wenn ich also zu http://localhost/mautic/s/dashboard gehe, bleibt die URL gleich und Mautic wird mit einer Reihe von ERR_ABORTED 404-Fehlern geladen (siehe das Bild der Chrome-Entwicklerkonsole unten). Die Anforderungsheader für diese Dateien zeigen, dass in der Anforderungs-URL immer noch der Teil /mautic/ fehlt (obwohl ich ihn manuell in die URL des Browsers eingefügt habe). Es ist also verständlich, dass diese Dateien nicht gefunden werden können, weil die URL des Anforderungsheaders falsch ist. Aber warum ist sie falsch?
So habe ich versucht, das Problem zu beheben:
Ich hatte dasselbe Problem mit meinem site-api
Dienst, einem Headless-CMS (Directus), das auf Node.js basiert, und habe es behoben, indem ich seine öffentliche URL in seiner Konfiguration auf http://localhost/api gesetzt habe. Wenn ich zu http://localhost/api/ gehe, funktioniert dieser Dienst einwandfrei. Also habe ich dasselbe in der Konfiguration von Mautic versucht und seine öffentliche URL von http://localhost:8081 auf http://localhost/mautic gesetzt. Wenn ich jetzt zu http://localhost/mautic/ gehe, wird die URL des Browsers korrekt auf http://localhost/mautic/s/dashboard gesetzt, aber ich erhalte trotzdem dasselbe Ergebnis, wie im Bild unten zu sehen ist.
Dies ist meine docker-compose.yml in Bezug auf Mautic und 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
Dies ist reverse-proxy
Dockerfile:
FROM nginx:alpine
RUN rm /etc/nginx/conf.d/*
COPY ./default.conf /etc/nginx/conf.d/
EXPOSE 80
CMD [ "nginx", "-g", "daemon off;" ]
Dies ist mautic
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
Mautic- ports.conf
Bilddatei
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
Mautic- 000-default.conf
Bilddatei
<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
Antwort1
Ich glaube, das ist ein Problem mit meinem Backend-Dienst Mautic und nicht mit NGINX. Was passiert und einige Lösungen können hier nachgelesen werden:https://serverfault.com/a/797006
Ich habe mich für eine Lösung entschieden, bei der ich eine Subdomäne auf meinen Dienst verweise, anstatt dass es sich um einen Unterpfad einer Domäne handelt.
Anstatt also zu versuchen, darauf über Folgendes zuzugreifen example.com/mautic/
:
location /mautic/ {
proxy_pass http://mautic:8081/;
}
Ich erstelle einen separaten Serverblock mit „ server_name
Eingestellt auf“ mautic.example.com
und mein Standortblock darin ist:
location / {
proxy_pass http://mautic:8081/;
}