So lässt sich CORS in Apache und Nginx aktivieren

Marc Wag­ner

August 26, 2021

3 min read|

Der CORS-Hea­­der dient dazu, Ursprungs­über­grei­fen­de HTTP-Anfor­­de­run­­gen über Skrip­te zu beschrän­ken. In eini­gen Fäl­len ist es jedoch sinn­voll, die­se Beschrän­kung anzu­pas­sen.

Bei dei­ner Word­Press Web­sei­te kann das zum Bei­spiel sinn­voll sein, falls du WPML ver­wen­dest. Über den CORS-Hea­­der kannst du dann erlau­ben, das Res­sour­cen auch von ande­ren Domains gela­den wer­den dür­fen, damit die­se nicht dop­pelt bereit­ge­stellt wer­den müs­sen (z.B. Schrift­ar­ten, CSS & JS Datei­en etc.).

So kannst du CORS bei Apache aktivieren #

Um CORS für Apa­che zu akti­vie­ren, musst du ent­we­der die httpd.conf ver­än­dern, oder dei­ne HTAC­CESS-Datei erwei­tern. Die HTACCESS Vari­an­te funk­tio­niert jedoch nur, wenn du auch mod_headers für Apa­che akti­viert hast.

Um CORS direkt über die httpd.conf zu akti­vie­ren, musst du fol­gen­des ergän­zen:

Header set Access-Control-Allow-Origin "*"

Alter­na­tiv in HTACCESS die fol­gen­de Zei­le ein­fü­gen:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Hier­durch wer­den alle Beschrän­kun­gen auf­ge­ho­ben, wodurch auch ande­re Domains Daten abru­fen kön­nen. Alter­na­tiv kannst du auch nur ein­zel­ne Domains von der Beschrän­kung des CORS-Hea­­ders aus­neh­men, hier­zu fügst du fol­gen­de Zei­le ein:

Header set Access-Control-Allow-Origin "https://meinedomain.de"

Auch hier wie­der die HTACCESS Vari­an­te:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "https://meinedomain.de"
</IfModule>

Möch­test du hin­ge­gen CORS für meh­re­re Domains erlau­ben wird es etwas kom­pli­zier­ter, dann musst du das gan­ze wie folgt in der httpd.conf hin­ter­le­gen:

SetEnvIf Origin "http(s)?://(www\.)?(meinedomain.de|meineanderedomain.de)$" AccessControlAllowOrigin=$0$1
Header set Access-Control-Allow-Origin "%{AccessControlAllowOrigin}e" env=AccessControlAllowOrigin

Auch die­se Metho­de lässt sich in HTACCESS abbil­den, sie­he 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 Ände­run­gen nur noch spei­chern und dei­nen Apa­che Ser­vice neu star­ten.

So kannst du CORS bei Nginx aktivieren #

CORS lässt sich auch bei Nginx akti­vie­ren und ver­än­dern — ledig­lich der Syn­tax ist ein ande­rer im Ver­gleich zu Apa­che. Hier­zu musst du die Kon­fi­gu­ra­ti­ons­da­tei (z.B.: /etc/nginx/conf.d/default.conf) wie folgt ergän­zen.

add_header Access-Control-Allow-Origin "*";

Falls du es für alle Domains akti­vie­ren möch­test.

Alter­na­tiv kannst du die Beschrän­kun­gen des CORS-Hea­­der auch nur für bestimm­te Domains deak­ti­vie­ren. Dazu musst du die Domain expli­zit ange­ben. Das gan­ze sieht dann in etwas so aus:

add_header Access-Control-Allow-Origin "https://meinedomain.de";

Möch­test du hin­ge­gen meh­re­re Domains von der Beschrän­kung aus­neh­men, musst du hier­für eine Abfra­ge ein­bau­en. Das liegt dar­an, das die Brow­ser nur einen “Access-Con­rol-Allow-Ori­­gin” Hea­der erlau­ben.

Um das gan­ze nun dyna­misch ein­zu­bin­den kannst du die­sen Code neh­men und an dei­ne Vor­ga­ben anpas­sen:

if ( $org ~* (https?://(.+\.)?(meinedomain1|meinedomain2|meinedomain3)\.(?:de|fr|com)$) ) {
   add_header "Access-Control-Allow-Origin" "$org";
}

Das war es auch schon. Denk dar­an, nach dem Spei­chern der Datei dei­nen Nginx Ser­vice neu zu star­ten, um die Ände­run­gen zu über­neh­men.

Fazit #

Du soll­test nun in der Lage sein, den CORS-Hea­­der für Apa­che und Nginx zu ver­än­dern, um mög­li­che Feh­ler zu behe­ben. Obwohl es mög­lich ist, eine Wild­card für alle Domains zu erstel­len soll­test du den CORS-Hea­­der aus Sicher­heits­grün­den nur für ein­zel­ne Domains akti­vie­ren.

Du hast Anmer­kun­gen oder Fra­gen? Dann hin­ter­las­se uns doch ger­ne einen Kom­men­tar.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar