Я пытаюсь реализовать CORS в моем определении NAT-хоста NGINX на основе конфигурации от http://enable-cors.org/server_nginx.html. То, что я пытаюсь добиться, чтобы присвоить переменный $ valid_cors_origin в моем определении ВХоста, а затем включить другой файл, который обрабатывает все проверки CORS, например так:NGINX: using regex from variable
location/{
...
$valid_cors_origin = "foobar";
include cors_handling;
}
в то время как я раздел location
среды от пример из enable-cors.org. В этой установке, следующие работы в cors_handling
:
if ($http_origin = "${valid_cors_origin}"){
set $cors "true";
}
до тех пор, как я добавить заголовок Origin: foobar
к моей просьбе, очевидно.
В примере с сайта enable-cors.org они используют регулярное выражение для соответствия $http_origin
. Я хочу иметь возможность сделать то же самое, и поэтому вам нужно назначить регулярное выражение переменной $valid_cors_origin
. Проблема в том, что переменная, по-видимому, не оценивается в выражении if. До сих пор я попытался следующие, без везения:
$valid_cors_origin = "/(foo|bar)/";
if ($http_origin *~ $valid_cors_origin){
set $cors "true";
}
оставляет меня с
[notice] 43797#0: *1 $valid_cors_origin does not match "foobar"
Попытка заставить оценки строки:
if ($http_origin *~ "${valid_cors_origin}"){
set $cors "true";
}
[notice] 43797#0: *1 "${valid_cors_origin}" does not match "foobar"
и некоторые другие варианты, в которых я заменил $valid_cors_origin
только /foo/
, но поскольку он, похоже, не оценивается, я думаю, что не имеет значения, что я назначаю $valid_cors_origin
.
Возможно ли это в NGINX и/или существуют другие модульные способы решения этой проблемы? Основное требование: я хочу иметь возможность полностью управлять своим действительным происхождением из файла vhost и поддерживать конфигурацию cors_handling
как можно более общей.
Обновление: У меня есть время, чтобы проверить предлагаемое решение от @cnst, и оно отлично работает. Просто чтобы быть полным, я убрал чек на $ http_origin из файла cors_handling и переместил чек сам виртуальный хост, где я могу это сделать:
if ($http_origin ~* (regex|for|my|httporigin)) {
set $cors "true";
}
include cors_handling;
Я мог бы переместить чек на $ http_origin в среду местоположения, если я жестко задаю $ cors для «true» в примере enable-cors.org.Я попробую это и опубликую свои результаты. – skoef