এনজিআইএনএক্সে আমি কীভাবে অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স যুক্ত করব?


158

আমি কীভাবে অ্যাক্সেস-কন্ট্রোল-অলজিন-অরিজিন শিরোনাম সেট করব যাতে আমি আমার প্রধান ডোমেনে আমার সাবডোমেন থেকে ওয়েব-ফন্টগুলি ব্যবহার করতে পারি?


নোট:

এইচটিএমএল 5 বিপি সার্ভার কনফিগস প্রকল্পসমূহ https://github.com/h5bp/server-configs- এ বেশিরভাগ HTTP সার্ভারের জন্য আপনি এবং অন্যান্য শিরোনামের উদাহরণ পাবেন


4
আহ অবশেষে উত্তর অবস্থানটি খুঁজে পেয়েছে / {add_header অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি দিন "*"; }
ক্রিস ম্যাককি

উত্তর:


182

এনগিনেক্সকে http://wiki.nginx.org/NginxHttpHeedaModule (উবুন্টু এবং অন্যান্য কিছু লিনাক্স ডিগ্রোতে ডিফল্ট) দিয়ে সংকলন করতে হবে । তাহলে আপনি এটি করতে পারেন

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

যদি আপনি চান ক্ষেত্রে এই নির্দেশাবলী অনুসরণ করুন Apache একই সমাধান বাস্তবায়ন করতে চাই: stackoverflow.com/questions/11616306/...
camilo_u

6
এই মডিউলটি ডিফল্টরূপে সংকলিত বলে মনে হচ্ছে (কমপক্ষে উবুন্টুতে)।
স্টিভ বেনেট

1
এছাড়াও অ্যামাজন লিনাক্স রেপোতে ডিফল্টরূপে সংকলিত হয়
রস

1
কোন ফাইল এবং অবস্থানের মধ্যে আমাদের এই অবস্থানের নির্দেশ রাখা উচিত?
সুমিত অরোরা

1
এটি আমার পক্ষে কাজ করে না। এনগিনেক্স ১.১০.০, উবুন্টু 16.04
ওমিড আমরাই

36

আরও একটি আপ-টু-ডেট উত্তর:

#
# 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-configration.html

Access-Control-Expose-Headersআপনার কাস্টম এবং / অথবা 'অ-সিম্পল' শিরোনামটি আজাক্স অনুরোধগুলিতে প্রকাশ করার জন্য আপনি (অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শিরোনামগুলির একই বিন্যাসে) যুক্ত করতেও পারেন ।

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/

অন্যান্য ওয়েব সার্ভারের জন্য কনফিগস http://enable-cors.org/server.html


1
প্রতিটি জায়গার জন্য এই লাইনগুলি পুনরাবৃত্তি করতে হবে না কোনও উপায়? আমরা কি এটি সার্ভার under} ব্লকের মধ্যে রাখতে পারি?
জিওউইজ

@ জাইউইউস (@ ব্যতীত আমি কোনও বিজ্ঞপ্তি পাইনি); আপনি এটি অবস্থানের উপরে রাখতে পারেন, ঠিক আছে :)
ক্রিস ম্যাককি

অ্যাক্সেস-কন্ট্রোল-এক্সপোজ-শিরোনাম এখানে অনুপস্থিত
chovy

3
দয়া করে ifএনজিনেক্সে এড়িয়ে চলুন - এমনকি সরকারী ম্যানুয়াল এটিকে নিরুৎসাহিত করে
সমষ্টি

1
আমি যুক্ত করতে চাই যে এটি alwaysসবার সাথে বিকল্প যুক্ত করা দরকারী add_headerযাতে 200-নন প্রতিক্রিয়াগুলির জন্য শিরোনামগুলিও যুক্ত করা যায়। যেহেতু nginx 1.7.5: nginx.org/en/docs/http/ngx_http_headers_module.html
Mitar

11

এখানে আমি নিবন্ধটি লিখেছি যা জিইটি | পোষ্টের জন্য সদৃশ কিছু এড়িয়ে চলে। আপনাকে এনজিএনএক্স-এ সিওআরএসের সাথে যেতে হবে।

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

2
এসএফ নীতি অনুসারে আপনার কেবল লিঙ্কের নয়, পোস্টে তথ্য অনুলিপি করতে হবে। ওয়েবসাইটগুলি যে কোনও সময় অদৃশ্য হয়ে যেতে পারে, যা তথ্য হারাতে পারে।
টিম

1
বৈধ পয়েন্ট @ আইটিএম, কোড অন্তর্ভুক্ত করার জন্য আপডেট হয়েছে
গ্যানসরেস্ট

204 No contentএটি যথাযথ বলে মনে হচ্ছে স্থিতি কোডটি ব্যবহার করুন ।
স্লাভা ফমিন দ্বিতীয়

7

প্রথমত, আমি বলতে পারি যে @ হেলভিনজ উত্তরটি আমার পক্ষে কাজ করছে:

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ফাইল। যেমনটি বলা হয়েছে, উপরের সমাধানটি তখন কাজ করেছিল।


2
আমি সাধারণত লোকেদের H5BP gimeub.com/h5bp/server-configs-nginx/blob/master/mime.tyype এ মাইম টাইপ ফাইলটি পরীক্ষা করার জন্য নির্দেশ করতাম :)
ক্রিস ম্যাককি

4

এনগিনেক্সের traditionalতিহ্যবাহী অ্যাড_হেডার নির্দেশিকা 4xx প্রতিক্রিয়া নিয়ে কাজ করে না। যেহেতু আমরা এখনও তাদের কাস্টম শিরোনাম যুক্ত করতে চাই, আরও_সেট_হেডার নির্দেশিকা ব্যবহার করতে সক্ষম হতে আমাদের ngx_headers_more মডিউলটি ইনস্টল করতে হবে, এটি 4XX প্রতিক্রিয়াগুলির সাথেও কাজ করে।

sudo apt-get install nginx-extras

তারপরে 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;
    }
}

1

কিছু ক্ষেত্রে সমস্ত HTTP প্রতিক্রিয়া কোডগুলি কভার করার জন্য আপনাকে add_headerনির্দেশিকা ব্যবহার করতে হবে toalways

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

ডকুমেন্টেশন থেকে :

সর্বদা প্যারামিটার নির্দিষ্ট করা থাকলে (1.7.5), শিরোনাম ক্ষেত্রটি প্রতিক্রিয়া কোড নির্বিশেষে যুক্ত করা হবে।

প্রতিক্রিয়া শিরোনামে নির্দিষ্ট ক্ষেত্র যুক্ত করে যে প্রতিক্রিয়া কোডটি 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), বা 308 (1.13 ২.0)। প্যারামিটার মান ভেরিয়েবল থাকতে পারে।


0

আমার ক্ষেত্রে, রেল 5 ব্যবহার করে, একমাত্র কার্যক্ষম সমাধানটি rack-corsমণি যুক্ত করে চলেছে । তাই ভালো:

in / 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


কীভাবে এই nginx স্থির ফাইল পরিবেশন করতে সাহায্য করে?
ওয়াল্ফ

রেল 5 অ্যাপ্লিকেশন পরিবেশন করতে আমি বিপরীত প্রক্সি হিসাবে nginx ব্যবহার করছিলাম। এটি একটি বিশেষ ক্ষেত্রে যেখানে সিওআরএস বিধিনিষেধটি এনজিনেক্স থেকে আসে না তবে এর পিছনে মূল রেলস অ্যাপ থেকে আসে।
user9869932
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.