सवाल मैं एनजीआईएनएक्स में एक्सेस-कंट्रोल-ऑर्डर-ऑरिजन कैसे जोड़ूं?


मैं एक्सेस-कंट्रोल-ऑर्डर-ओरिजिन हेडर कैसे सेट करूं ताकि मैं अपने मुख्य डोमेन पर अपने सबडोमेन से वेब-फोंट का उपयोग कर सकूं?


टिप्पणियाँ:

आपको HTML5BP सर्वर कन्फिग प्रोजेक्ट्स में अधिकांश HTTP सर्वरों के लिए इस और अन्य शीर्षलेखों के उदाहरण मिलेंगे https://github.com/h5bp/server-configs


133
2017-07-20 22:57


मूल


आह अंत में उत्तर स्थान / {add_header एक्सेस-कंट्रोल-अनुमति-उत्पत्ति "*" पाया; } - Chris McKee
ng4free.com/... - Jaydeep Gondaliya


जवाब:


Nginx के साथ संकलित किया जाना है http://wiki.nginx.org/NginxHttpHeadersModule (उबंटू और कुछ अन्य लिनक्स distros पर डिफ़ॉल्ट)। फिर आप यह कर सकते हैं

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

157
2017-09-01 00:25



यदि आप अपाचे पर एक ही समाधान को लागू करना चाहते हैं तो इस निर्देश का पालन करें: stackoverflow.com/questions/11616306/... - camilo_u
उस मॉड्यूल को डिफ़ॉल्ट रूप से संकलित किया जाता है (कम से कम उबंटू पर)। - Steve Bennett
अमेज़ॅन लिनक्स रेपो पर डिफ़ॉल्ट रूप से संकलित भी - Ross
किस फ़ाइल और स्थान में हमें यह स्थान निर्देश देना चाहिए? - Sumit Arora
यह मेरे लिए काम नहीं करता है। Nginx 1.10.0, उबंटू 16.04 - Omid Amraei


एक और अद्यतित उत्तर:

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

स्रोत: https://michielkalkman.com/snippets/nginx-cors-open-configuration.html

आप भी जोड़ना चाहेंगे Access-Control-Expose-Headers (एक्सेस-कंट्रोल-ऑर्डर-हेडर के समान प्रारूप में) अपने कस्टम और / या 'गैर-सरल' हेडर को AJAX अनुरोधों को बेनकाब करने के लिए।

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/

अन्य वेब सर्वर के लिए Configs http://enable-cors.org/server.html


29
2017-08-24 11:01



हर जगह के लिए इन लाइनों को दोहराने की ज़रूरत नहीं है? क्या हम इसे सर्वर {} ब्लॉक के नीचे रख सकते हैं? - geoyws
@geoyws (बिना @ मुझे एक अधिसूचना मिली); आप इसे स्थान से ऊपर रख सकते हैं, ठीक है :) - Chris McKee
एक्सेस-कंट्रोल-एक्सपोज़-हेडर यहां गायब हैं - chovy
@jovy AJAX अनुरोधों के लिए गैर डिफ़ॉल्ट को बेनकाब करने के लिए एक वैकल्पिक शीर्षलेख है, लेकिन मैं इसे लोगों को इतनी विधिवत जोड़ने के लिए देख सकता हूं। टा - Chris McKee
कृपया उपयोग करने से बचें if nginx में - यहां तक ​​कि आधिकारिक मैनुअल इसे हतोत्साहित करता है। - aggregate1166877


सबसे पहले, मुझे कहना है कि @hellvinz जवाब मेरे लिए काम कर रहा है:

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

हालांकि, मैंने इस सवाल का जवाब अलग जवाब के साथ देने का फैसला किया है क्योंकि समाधान के लिए लगभग दस घंटे लगने के बाद ही मैं इस समाधान को काम करने में कामयाब रहा हूं।

ऐसा लगता है कि Nginx डिफ़ॉल्ट रूप से किसी भी (सही) फ़ॉन्ट MIME प्रकार को परिभाषित नहीं करता है। अनुगमन करते हुए यह ट्यूमरियल मैंने पाया कि मैं निम्नलिखित जोड़ सकता हूं:

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

मेरे लिए etc/nginx/mime.types फ़ाइल। जैसा कि कहा गया है, उपरोक्त समाधान तब काम किया।


6
2018-01-04 15:24



मैं आमतौर पर लोगों को H5BP पर माइम प्रकार फ़ाइल की जांच करने के लिए इंगित करता हूं github.com/h5bp/server-configs-nginx/blob/master/mime.types :) - Chris McKee


यहां लिखा गया लेख है जो जीईटी | पोस्ट के लिए कुछ डुप्लिकेशंस से बचाता है। यह आपको Nginx में सीओआरएस के साथ जाना चाहिए।

nginx अभिगम नियंत्रण मूल की अनुमति देते हैं

पोस्ट से नमूना स्निपेट यहां दिया गया है:

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

5
2018-04-17 21:15



एसएफ नीति के अनुसार आपको जानकारी को प्रतिलिपि बनाने की आवश्यकता है, न केवल उससे लिंक करें। वेबसाइटें किसी भी समय गायब हो सकती हैं, जो जानकारी का नुकसान होगा। - Tim
मान्य बिंदु @tim, कोड शामिल करने के लिए अद्यतन किया गया - gansbrest


Nginx का पारंपरिक add_header निर्देश 4xx प्रतिक्रियाओं के साथ काम नहीं करता है। चूंकि हम अभी भी कस्टम हेडर जोड़ना चाहते हैं, हमें ngx_headers_more मॉड्यूल को और_set_headers निर्देश का उपयोग करने में सक्षम होने के लिए स्थापित करने की आवश्यकता है, जो 4xx प्रतिक्रियाओं के साथ भी काम करता है।

sudo apt-get install nginx-extras

फिर उपयोग करें more_set_headers nginx.conf फ़ाइल में, मैंने नीचे अपना नमूना चिपकाया है

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





मेरे मामले में, रेल 5 का उपयोग करके, एकमात्र कामकाजी समाधान जोड़ रहा है rack-cors मणि। इस तरह:

में / Gemfile

# Gemfile
gem 'rack-cors'

कॉन्फ़िगर / प्रारंभकर्ता / 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

स्रोत: https://til.hashrocket.com/posts/4d7f12b213-rails-5-api-and-cors


0
2018-05-04 23:07



यह nginx स्थिर फाइलों की सेवा कैसे मदद करता है? - Walf
मैं रेल 5 ऐप की सेवा के लिए एक रिवर्स प्रॉक्सी के रूप में nginx का उपयोग कर रहा था। यह एक विशेष मामला है जहां सीओआरएस प्रतिबंध nginx से नहीं आ रहा था, लेकिन इसके पीछे मूल रेल ऐप से। - xyz