2017-02-22 47 views
0

Я не совсем понимаю разницу между указанием конкретных блоков сервера (1) и установкой ограничений на CORS (2).Nginx: разница между ограничениями CORS и конкретными серверными блоками

Т.е. если я хочу ограничить вызовы API только доменами1.com и domain2.com, какой из них я должен выбрать?

(1)

http { 
    index index.html; 

    server { 
    server_name www.domain1.com; 
    access_log logs/domain1.access.log main; 

    root /var/www/domain1.com/htdocs; 
    } 
    server { 
    server_name www.domain2.com; 
    access_log logs/domain2.access.log main; 

    root /var/www/domain2.com/htdocs; 
    } 
} 

(2)

set $cors ''; 
if ($http_origin ~ '^https?://(localhost|www\.domain1\.com|www\.domain2\.com)') { 
     set $cors 'true'; 
} 

if ($cors = 'true') { 
     add_header 'Access-Control-Allow-Origin' "$http_origin" always; 
... 

ответ

1

Я новичок с Nginx, однако, я думаю, что я могу ответить на ваш вопрос: это зависит от того, что вы пытаетесь делать.

(1) Блоки сервера определяют, обрабатывает ли веб-сервер запрос на основе запрошенного домена. Например. если клиент запрашивает domain1.com, сервер будет обслуживать ресурсы domain1.com; если клиент запрашивает домен2.com, то сервер будет обслуживать ресурсы domain2.com; и т. д.

(2) Код CORS, как вы показали, определяет, посылает ли сервер браузеру заголовок CORS («Access-Control-Allow-Origin») в ответе (т. е. заголовок сообщает браузеру, следует ли отправлять запросы клиента только из того же домена или нет). Это инструкции для браузера клиента для реализации ограничений на запрос CORS (в моем понимании) - они не являются ограничениями CORS на стороне сервера.

Итак, если вы хотите, чтобы клиентский веб-браузер «ограничивал api-звонки», тогда (2) - ваш лучший выбор, тогда как если вы просто хотите, чтобы api-вызовы для определенного домена использовали конкретный код, тогда (1) лучший выбор. Если, как и я, вы хотите внедрить ограничения CORS на стороне сервера, то ни один из ваших вариантов не выполнит это, и вы должны реализовать другое решение (но то, что вы предоставили с помощью (2), может быть очень полезно, если оно используется для определения того, как обслуживать ответ, а не отправлять заголовок CORS в браузер). НТН.