So lässt sich CORS in Apache und Nginx aktivieren
Marc Wagner
August 26, 2021
Der CORS-Header dient dazu, ursprungsübergreifende HTTP-Anforderungen über Skripte zu beschränken. In einigen Fällen ist es jedoch sinnvoll, diese Beschränkung anzupassen.
Bei deiner WordPress-Webseite kann das zum Beispiel sinnvoll sein, falls du WPML verwendest. Über den CORS-Header kannst du dann erlauben, dass Ressourcen auch von anderen Domains geladen werden dürfen, damit diese nicht doppelt bereitgestellt werden müssen (z.B. Schriftarten, CSS & JS-Dateien etc.).
So kannst du CORS bei Apache aktivieren #
Um CORS für Apache zu aktivieren, musst du entweder die httpd.conf verändern, oder deine HTACCESS-Datei erweitern. Die HTACCESS Variante funktioniert jedoch nur, wenn du auch mod_headers für Apache aktiviert hast.
Um CORS direkt über die httpd.conf zu aktivieren, musst du Folgendes ergänzen:
Header set Access-Control-Allow-Origin "*"
Alternativ in HTACCESS die folgende Zeile einfügen:
<IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule>
Hierdurch werden alle Beschränkungen aufgehoben, wodurch auch andere Domains Daten abrufen können. Alternativ kannst du auch nur einzelne Domains von der Beschränkung des CORS-Headers ausnehmen, hierzu fügst du folgende Zeile ein:
Header set Access-Control-Allow-Origin "https://meinedomain.de"
Auch hier wieder die HTACCESS Variante:
<IfModule mod_headers.c> Header set Access-Control-Allow-Origin "https://meinedomain.de" </IfModule>
Möchtest du hingegen CORS für mehrere Domains erlauben, wird es etwas komplizierter, dann musst du das Ganze wie folgt in der httpd.conf hinterlegen:
SetEnvIf Origin "http(s)?://(www\.)?(meinedomain.de|meineanderedomain.de)$" AccessControlAllowOrigin=$0$1 Header set Access-Control-Allow-Origin "%{AccessControlAllowOrigin}e" env=AccessControlAllowOrigin
Auch diese Methode lässt sich in HTACCESS abbilden, siehe hier:
<IfModule mod_headers.c> SetEnvIf Origin "http(s)?://(www\.)?(meinedomain.de|meineandereodomain.example)$" AccessControlAllowOrigin=$0$1 Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin Header set Access-Control-Allow-Credentials true </IfModule>
Nun musst du die Änderungen nur noch speichern und deinen Apache-Service neu starten.
So kannst du CORS bei Nginx aktivieren #
CORS lässt sich auch bei Nginx aktivieren und verändern — lediglich der Syntax ist ein anderer im Vergleich zu Apache. Hierzu musst du die Konfigurationsdatei (z.B.: /etc/nginx/conf.d/default.conf) wie folgt ergänzen.
add_header Access-Control-Allow-Origin "*";
Falls du es für alle Domains aktivieren möchtest.
Alternativ kannst du die Beschränkungen des CORS-Headers auch nur für bestimmte Domains deaktivieren. Dazu musst du die Domain explizit angeben. Das Ganze sieht dann in etwas so aus:
add_header Access-Control-Allow-Origin "https://meinedomain.de";
Möchtest du hingegen mehrere Domains von der Beschränkung ausnehmen, musst du hierfür eine Abfrage einbauen. Das liegt daran, dass die Browser nur einen “Access-Conrol-Allow-Origin” Header erlauben.
Um das Ganze nun dynamisch einzubinden, kannst du diesen Code nehmen und an deine Vorgaben anpassen:
if ($http_origin ~* ^https?://(.+\.)?(meinedomain1|meinedomain2|meinedomain3)\.(de|fr|com)$) { add_header "Access-Control-Allow-Origin" "$http_origin"; add_header "Vary" "Origin"; }
Das war es auch schon. Denk daran, nach dem Speichern der Datei deinen Nginx Service neu zu starten, um die Änderungen zu übernehmen.
Fazit #
Du solltest nun in der Lage sein, den CORS-Header für Apache und Nginx zu verändern, um mögliche Fehler zu beheben. Obwohl es möglich ist, eine Wildcard für alle Domains zu erstellen, solltest du den CORS-Header aus Sicherheitsgründen nur für einzelne Domains aktivieren.
Du hast Anmerkungen oder Fragen? Dann hinterlasse uns doch gerne einen Kommentar.
Artikel von:
Marc Wagner
Hallo, Marc hier. Ich bin der Gründer von Forge12 Interactive und bereits seit über 20 Jahren leidenschaftlich dabei Webseiten, Onlineshops, Anwendungen und SaaS-Lösungen für Unternehmen zu entwickeln. Vor der Gründung habe ich bereits in Börsen notierten Unternehmen gearbeitet und mir allerlei Wissen angeeignet. Dieses Wissen möchte ich nun an meine Kunden weitergeben.