Soru NGINX'te Erişim-Kontrol-İzin-Kökeni nasıl ekleyebilirim?


Access-Control-Allow-Origin üstbilgisini nasıl ayarlayabilirim, böylece ana etki alanımdaki web-yazı tiplerini ana etki alanımdan kullanabilirim?


Notlar:

HTML5BP Server Configs projelerindeki çoğu HTTP sunucusu için bu ve diğer başlıkların örneklerini bulacaksınız. https://github.com/h5bp/server-configs


133
2017-07-20 22:57


Menşei


ah sonunda cevap yerini buldu / {add_header Erişim-Kontrol-İzin-Menşei * * "; } - Chris McKee
ng4free.com/... - Jaydeep Gondaliya


Cevaplar:


Nginx ile derlenmesi gerekiyor http://wiki.nginx.org/NginxHttpHeadersModule (Ubuntu ve diğer bazı Linux dağıtımlarında varsayılan). Sonra bunu yapabilirsin

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

158
2017-09-01 00:25



Aynı çözümü apache'de uygulamak istediğinizde bu talimatları izleyin: stackoverflow.com/questions/11616306/... - camilo_u
Bu modül varsayılan olarak derlenmiş gibi görünüyor (en azından Ubuntu'da). - Steve Bennett
amazon linux repo'da da varsayılan olarak derlendi - Ross
Hangi konumda ve yerde bu konum yönergesini koymalıyız? - Sumit Arora
Benim için çalışmıyor. Nginx 1.10.0, Ubuntu 16.04 - Omid Amraei


Daha güncel bir cevap:

#
# 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';
     }
}

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

Ayrıca eklemek isteyebilirsiniz Access-Control-Expose-Headers Özel ve / veya 'basit olmayan' başlıklarınızı ajax isteklerine açıklamak için (Erişim-İzin-İzin-Başlıkları ile aynı biçimde).

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/

Diğer web sunucuları için Configs http://enable-cors.org/server.html


29
2017-08-24 11:01



Her yer için bu satırları tekrarlamak zorunda kalmamanın bir yolu var mı? Onu {} bloğu sunucusunun altına koyabilir miyiz? - geoyws
@geoyws (@ olmadan bir bildirim almadı); konumu üzerine koyabilirsiniz, thats güzel :) - Chris McKee
erişim-kontrol-poz-başlıkları burada eksik - chovy
varsayılan olmayan ajax isteklerine maruz bırakmak için isteğe bağlı bir üstbilgiyi @chovy ama o kadar ekledi insanlar kadar açarak görebilirsiniz. Ta - Chris McKee
Lütfen kullanmaktan kaçının if nginx'te - resmi el kitabı bile bunu engelliyor. - aggregate1166877


İşte ben GET | POST için bazı çoğaltmalardan kaçınan yazdığım yazı. Nginx'te CORS'e gitmen gerek.

nginx erişim kontrolü menşe

İşte gönderideki örnek pasaj:

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
    ....
  }
}

6
2018-04-17 21:15



SF politikasına göre, bilgileri sadece bağlantıya değil, postaya kopyalamanız gerekir. Web siteleri herhangi bir zamanda kaybolur, bu da bilgi kaybı olur. - Tim
Kodu içerecek şekilde güncelleştirilmiş @tim, - gansbrest


Öncelikle, bana @hellvinz cevabının benim için çalıştığını söyleyeyim:

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

Ancak, bu çözümü ayrı bir cevapla yanıtlamaya karar verdim, çünkü çözüm bulmak için yaklaşık on saat sonra bu çözümü çalıştırmayı başardım.

Nginx varsayılan olarak herhangi bir (doğru) yazı tipi MIME türü tanımlamıyor gibi görünüyor. Takip ederek bu tuhaf Aşağıdakileri ekleyebileceğimi buldum:

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

Benim için etc/nginx/mime.types dosya. Belirtildiği gibi, yukarıdaki çözüm işe yaradı.


6
2018-01-04 15:24



İnsanları H5BP'de MIME tipi dosyasını kontrol etmeye yönlendiririm. github.com/h5bp/server-configs-nginx/blob/master/mime.types :) - Chris McKee


Nginx'in geleneksel add_header yönergesi, 4xx yanıtıyla çalışmaz. Hala onlara özel başlık eklemek istediğimizden, ayrıca 4xx yanıtıyla çalışan more_set_headers yönergesini kullanabilmek için ngx_headers_more modülünü yüklememiz gerekiyor.

sudo apt-get install nginx-extras

Sonra kullan more_set_headers nginx.conf dosyasında, aşağıdaki örnekimi yapıştırdım

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;
    }
}

2
2018-05-30 10:41





Benim durumumda, Rails 5'i kullanarak, tek çalışma çözümü rack-cors mücevher. Öyle:

in / Gemfile

# Gemfile
gem 'rack-cors'

config / initializers / cors.rb içinde

# 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

kaynak: https://til.hashrocket.com/posts/4d7f12b213-rails-5-api-and-cors


0
2018-05-04 23:07



Bu nginx'e statik dosyalar sunmada nasıl yardımcı olur? - Walf
Rayları 5 app hizmet etmek için bir ters vekil olarak nginx kullanıyordum. Bu, CORS kısıtlamasının nginx'ten gelmediği ancak arkasındaki menşe Rails Uygulamasından geldiği özel bir durumdur. - xyz