Monica CRM – Fix mixed content (HTTP assets on HTTPS)
Installationskontext
Monica CRM wurde mithilfe des offiziellen Proxmox VE Community Scripts installiert.
Das bedeutet:
- Monica läuft in einem Proxmox LXC-Container
- PHP, Apache2 und die Verzeichnisstruktur folgen den Defaults des Community-Scripts
- Konfigurationsänderungen (z. B.
.env) werden innerhalb des LXC vorgenommen - HTTPS wird typischerweise außerhalb des Containers terminiert, z. B. über einen Reverse Proxy (Nginx Proxy Manager o. Ä.)
Aufgrund dieses Setups sind vertrauenswürdige Proxy-Header und korrekte HTTPS-Erkennung zwingend erforderlich, sonst geht Monica/Laravel fälschlicherweise von HTTP aus und generiert Mixed-Content-URLs.
Problem
Beim Zugriff auf Monica über HTTPS zeigt der Browser Warnungen wie:
- CSS oder Bilder werden über
http://geladen - Assets werden blockiert oder nur teilweise geladen
- DevTools meldet „Mixed Content“-Warnungen
Beispiel:
Die Seite unter https://monica.example.net hat unsicheren Inhalt von http://monica.example.net/… angefordert
Ursache
Monica (Laravel-basiert) glaubt weiterhin, auf HTTP zu laufen, obwohl sie über HTTPS via Reverse Proxy erreicht wird.
Typische Gründe:
APP_URList immer noch aufhttp://gesetzt- Reverse-Proxy-Header werden nicht vertraut
- Laravel-Konfigurations-Cache wurde nicht geleert
Lösung (empfohlene Reihenfolge)
Führe die Schritte der Reihe nach aus und teste jeweils. Am besten direkt nach einer frischen Installation durchführen.
Oft reicht schon Schritt 1+2. Falls nicht, weiter mit 3 ff.
1. Korrekte APP_URL setzen
Datei .env von Monica bearbeiten:
APP_URL=https://monica.example.net
Wichtige Hinweise:
- Die endgültige öffentliche URL verwenden
- Kein abschließender Slash
- Muss exakt mit der Reverse-Proxy-Domain übereinstimmen
2. APP_ENV auf production setzen
In der .env-Datei von local auf production ändern:
# Zwei Möglichkeiten: local|production. local = Entwicklerversion, production = alles andere.
APP_ENV=production
3. Reverse-Proxy-Header vertrauen (sehr wichtig)
Falls die obigen Schritte nicht helfen, in .env ergänzen:
TRUSTED_PROXIES=*
Warum das entscheidend ist:
- Monica steht hinter einem Reverse Proxy
- HTTPS wird am Proxy terminiert
- Intern erhält Apache nur HTTP
- Ohne vertrauenswürdige Header geht Laravel von HTTP aus
4. Alle Caches löschen und neu aufbauen (Pflicht!)
Im Installationsverzeichnis von Monica ausführen:
php artisan optimize:clear
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
php artisan config:cache
Diesen Schritt niemals überspringen!
Laravel cached URLs sehr aggressiv.
5. Dienste neu starten
LXC / Bare-Metal (Apache2)
systemctl restart apache2
Docker / Docker Compose (falls du später wechselst)
docker compose restart
6. Nginx Proxy Manager (häufigstes Setup)
- Standardmäßig aktiviert
- Host-Header nicht überschreiben
- Kein Force-HTTP upstream
- Bei Unsicherheit: benutzerdefinierte Proxy-Header entfernen
Apache benötigt keine spezielle Konfiguration, solange die Header korrekt weitergeleitet werden.
7. Im Browser überprüfen
- Seite über HTTPS öffnen
- Hard Refresh durchführen (
Cmd + Shift + R) - DevTools → Network-Tab öffnen
- Alle Assets müssen über
https://geladen werden
Direkter Test:
https://monica.example.net/css/app-ltr.css
Es dürfen keine Weiterleitungen auf http:// mehr auftreten.
Zusammenfassung
Um Mixed-Content-Probleme bei Monica hinter einem Reverse Proxy (Apache2-Setup) zu beheben:
APP_URLauf HTTPS setzenAPP_ENV=productionsetzen- Proxy-Header vertrauen (
TRUSTED_PROXIES=*) - Alle Laravel-Caches löschen & neu cachen
- Apache neu starten (ggf. LXC rebooten)
Danach liefert Monica alle Assets korrekt über HTTPS aus.