Работа модуля CORS#
Директива cors предназначена для обработки preflight-запросов.
Ниже приведен пример использования механизма для обработки CORS запросов:
cors:
origin_wl: valid-origins.data
method_wl:
- post
- get
- put
- delete
deny_status: 403
set_output_headers:
- headers:
- 'Access-Control-Allow-Origin: $http_Origin'
conditions: origin.cond
- headers:
- 'Access-Control-Allow-Credentials: true'
conditions: origin.cond
- headers:
- 'Access-Control-Allow-Credentials: true'
conditions: no_origin_set_acac.cond
set_input_headers:
- headers:
- 'X-Forwarded-For: $remote_addr'
- headers:
- 'X-Forwarded-For: $orig_xff'
conditions: xff.cond
set_var: '$orig_xff $http_x_forwarded_for'
Подробное описание используемых параметров приведено в разделе «Пaраметр modifiers».
Формат содержимого файла с условиями приведен ниже:
Операнды |
Назначение |
Проверяемый ключ |
Допустимые операторы |
Проверяемое значение |
Использование переменной в проверяемом значении |
Примеры использования |
|---|---|---|---|---|---|---|
method |
Проверка метода запроса. |
нет |
== |
да |
нет |
method == POST |
headers_in |
Проверка наличия входящих/исходящих headers. |
нет |
contains |
да |
нет |
headers_in contains Origin |
header_in |
Проверка значений входящих/исходящих headers. |
да |
== |
да |
да, для операторов ==, !=, in, !in |
header_in User-Agent in Mozilla,Firefox |
variable |
Проверка значения переменной. |
да |
== |
да |
да, для операторов ==, !=, in, !in |
variable \(remote_addr ~ ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\) |
Файл может содержать много условий, но при не выполнении хотя бы одного условия, заголовок не выставляется.
Каждое из условий может выполнять проверку операнда из таблицы выше.
Описание операторов приведено в таблице ниже:
Оператор |
Описание |
Пример |
Комментарий |
|---|---|---|---|
== |
посимвольное равенство |
||
!= |
посимвольное неравенство |
||
in |
вхождение в перечисление |
in POST,GET,PUT |
значения указываются через разделитель «,» без пробелов |
!in |
отсутствие вхождения в перечисление |
!in POST,GET,PUT |
значения указываются через разделитель «,» без пробелов |
inwl |
вхождение в белый лист |
inwl /path/to/whitelist |
|
!inwl |
отсутствие вхождения в белый лист |
!inwl /path/to/whitelist |
|
~ |
регулярное выражение с учетом регистра |
~ ^UFS-SESSION=\d+$ |
|
!~ |
негативное регулярное выражение с учетом регистра |
||
~* |
регулярное выражение без учета регистра |
||
contains |
содержит значение |
||
!contains |
не содержит значение |
Ниже приведены примеры файлов, используемых в указании условий.
valid-origins.data
front.ift-node2.testonline.company.ru
https://front.ift-node2.testonline.company.ru
https://www.node1.online.company.ru
https://nginx-web.ift-node2.testoline.company.ru
front.ift-node5.testonline.company.ru
https://front.ift-node5.testonline.company.ru
https://front.ift-node5.testonline.company.ru:1111
origin.cond
method in POST,GET,OPTIONS,PUT,DELETE
headers_in contains Origin
header_in Origin inwl valid-origins.data
{# necessary to render a resource with a sowa-config #}
{% if conf is defined and conf.t_checkExists(current_path + "/valid-origins.data") %}{% endif %}
xff.cond
method in POST,GET
variable $orig_xff !~ ^$
variable $orig_xff ~ ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
{% if uko_web_xff_use_wl == True %}
variable $remote_addr inwl_re valid-ip.data
{# necessary to render a resource with a sowa-config #}
{% if conf is defined and conf.t_checkExists(current_path + "/valid-ip.data") %}{% endif %}
{% endif %}
valid-ip.data
111.111.111.111
222.222.222.222