it-swarm.com.de

Wie füge ich Access-Control-Allow-Origin in NGINX hinzu?

Wie setze ich den Header "Access-Control-Allow-Origin", damit ich Web-Schriftarten aus meiner Subdomain in meiner Hauptdomain verwenden kann?


Anmerkungen:

Beispiele für diesen und andere Header für die meisten HTTP-Server finden Sie in den HTML5BP Server Configs-Projekten https://github.com/h5bp/server-configs

165
Chris McKee

Nginx muss mit http://wiki.nginx.org/NginxHttpHeadersModule kompiliert werden (Standard unter Ubuntu und einigen anderen Linux-Distributionen). Dann können Sie dies tun

location ~* \.(eot|ttf|woff|woff2)$ {
    add_header Access-Control-Allow-Origin *;
}
190
hellvinz

Eine aktuellere Antwort:

#
# Wide-open CORS config for nginx
#
location / {
     if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        #
        # Om nom nom cookies
        #
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        #
        # Custom headers and headers various browsers *should* be OK with but aren't
        #
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        #
        # Tell client that this pre-flight info is valid for 20 days
        #
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        return 204;
     }
     if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
     }
     if ($request_method = 'GET') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
     }
}

quelle: https://michielkalkman.com/snippets/nginx-cors-open-configuration.html

Möglicherweise möchten Sie auch Access-Control-Expose-Headers (Im gleichen Format wie Access-Control-Allow-Headers) hinzufügen, um Ihre benutzerdefinierten und/oder "nicht einfachen" Header Ajax-Anforderungen auszusetzen.

Access-Control-Expose-Headers (optional) - The XMLHttpRequest 2 object has a 
getResponseHeader() method that returns the value of a particular response 
header. During a CORS request, the getResponseHeader() method can only access 
simple response headers. Simple response headers are defined as follows:

    Cache-Control
    Content-Language
    Content-Type
    Expires
    Last-Modified
    Pragma
 If you want clients to be able to access other headers, you have to use the
 Access-Control-Expose-Headers header. The value of this header is a comma-
 delimited list of response headers you want to expose to the client.

- http://www.html5rocks.com/en/tutorials/cors/

Konfigurationen für andere Webserver http://enable-cors.org/server.html

39
Chris McKee

Hier ist der Artikel, den ich geschrieben habe, der einige der Duplikate für GET | POST vermeidet. Es sollte Sie mit CORS in Nginx in Schwung bringen.

Nginx-Zugriffskontrolle erlaubt Origin

Hier ist das Beispiel-Snippet aus dem Beitrag:

server {
  listen        80;
  server_name   api.test.com;


  location / {

    # Simple requests
    if ($request_method ~* "(GET|POST)") {
      add_header "Access-Control-Allow-Origin"  *;
    }

    # Preflighted requests
    if ($request_method = OPTIONS ) {
      add_header "Access-Control-Allow-Origin"  *;
      add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
      add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
      return 200;
    }

    ....
    # Handle request
    ....
  }
}
11
gansbrest

Lassen Sie mich zunächst sagen, dass die Antwort von @hellvinz für mich funktioniert:

location ~* \.(eot|ttf|woff|woff2)$ {
    add_header Access-Control-Allow-Origin *;
}

Ich habe mich jedoch entschlossen, diese Frage mit einer separaten Antwort zu beantworten, da ich es erst geschafft habe, diese Lösung zum Laufen zu bringen, nachdem ich noch etwa zehn Stunden nach einer Lösung gesucht hatte.

Es scheint, dass Nginx standardmäßig keine (korrekten) MIME-Schriftarten definiert. Durch folgendes dieses Tutorial fand ich, dass ich Folgendes hinzufügen konnte:

application/x-font-ttf           ttc ttf;
application/x-font-otf           otf;
application/font-woff            woff;
application/font-woff2           woff2;
application/vnd.ms-fontobject    eot;

Zu meinem etc/nginx/mime.types Datei. Wie angegeben, funktionierte die obige Lösung dann.

7
DazBaldwin

Die traditionelle add_header-Direktive von Nginx funktioniert nicht mit 4xx-Antworten. Da wir ihnen weiterhin benutzerdefinierte Header hinzufügen möchten, müssen wir das Modul ngx_headers_more installieren, um die Direktive more_set_headers verwenden zu können, die auch mit 4xx-Antworten funktioniert.

Sudo apt-get install nginx-extras

Verwenden Sie dann more_set_headers in der Datei nginx.conf. Ich habe mein Beispiel unten eingefügt

server {
    listen 80;
    server_name example-site.com;
    root "/home/vagrant/projects/example-site/public";

    index index.html index.htm index.php;

    charset utf-8;

    more_set_headers 'Access-Control-Allow-Origin: $http_Origin';
    more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, HEAD';
    more_set_headers 'Access-Control-Allow-Credentials: true';
    more_set_headers 'Access-Control-Allow-Headers: Origin,Content-Type,Accept,Authorization';

    location / {
        if ($request_method = 'OPTIONS') {
            more_set_headers 'Access-Control-Allow-Origin: $http_Origin';
            more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, HEAD';
            more_set_headers 'Access-Control-Max-Age: 1728000';
            more_set_headers 'Access-Control-Allow-Credentials: true';
            more_set_headers 'Access-Control-Allow-Headers: Origin,Content-Type,Accept,Authorization';
            more_set_headers 'Content-Type: text/plain; charset=UTF-8';
            more_set_headers 'Content-Length: 0';
            return 204;
        }
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/example-site.com-error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }

    location ~ /\.ht {
        deny all;
    }
}
4
Hasnat Safder

In einigen Fällen müssen Sie add_header - Direktiven mit always verwenden, um all HTTP-Antwortcodes abzudecken.

location / {
    add_header 'Access-Control-Allow-Origin' '*' always;
}

Von Dokumentation :

Wenn der Parameter always angegeben ist (1.7.5), wird das Header-Feld unabhängig vom Antwortcode hinzugefügt.

Fügt das angegebene Feld einem Antwortheader hinzu, sofern der Antwortcode 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13) oder 308 (1.13) entspricht .0). Der Parameterwert kann Variablen enthalten.

3
laimison

In meinem Fall war die einzige funktionierende Lösung mit Rails 5) das Hinzufügen von rack-cors gem. Wie so:

in/Gemfile

# Gemfile
gem 'rack-cors'

in config/initializers/cors.rb

# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'localhost:4200'
    resource '*',
      headers: :any,
      methods: %i(get post put patch delete options head)
  end
end

quelle: https://til.hashrocket.com/posts/4d7f12b213-Rails-5-api-and-cors

0
user9869932