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, das 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-Header 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, das 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 ( $org ~* (https?://(.+\.)?(meinedomain1|meinedomain2|meinedomain3)\.(?:de|fr|com)$) ) {
add_header "Access-Control-Allow-Origin" "$org";
}
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.