nginx возвращает 405 при добавлении пустого if в блок location

nginx возвращает 405 при добавлении пустого if в блок location

Предположим, у нас есть следующая конфигурация ( $branchона установлена ​​до этого фрагмента, но, полагаю, не связана):

# If the request origin ends in .domain.com
set $allowed_origin "";
if ($http_origin ~* ^(.+\.)?domain\.com$) {
  set $allowed_origin $http_origin;
}

add_header Access-Control-Allow-Origin "$allowed_origin" always;
add_header Access-Control-Allow-Credentials "true" always;
add_header Access-Control-Allow-Headers "Accept, Authorization, Content-Type, Cookie, Some-Custom-Header, Another-Custom-Header, X-And-Another-One" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;

root /var/path/www/$branch/www;
index index.php index.html;
error_page 404 = /notfound.php;

location ~ ^/v\d+/ {
  root /var/path/www/$branch/www;
  try_files $uri_lower $uri_lower/ /some.php?$query_string;
}

location / {
  root /var/path/www/$branch/www;
  try_files $uri_lower $uri_lower/ =404;
}

location ~ \.php$ {
  try_files $uri_lower $uri_lower/ $uri $uri/ =404;
  include fastcgi-params;
}

Это отлично работает (возвращает 200) для следующего запроса:

OPTIONS https://some.domain.com/v1/graphql HTTP/1.1
Host: some.domain.com
Origin: https://another.domain.com

Однако, когда я просто добавляю пустое if(без add_headerизменений, просто пустое if) в первое, locationполучается:

location ~ ^/v\d+/ {
  if ($http_origin ~* ^(.+\.)?domain\.com$) {
  }
  root /var/path/www/$branch/www;
  try_files $uri_lower $uri_lower/ /some.php?$query_string;
}

он начинает реагировать

HTTP/1.1 405 Not Allowed

Кто-нибудь знает, почему и как я могу добавить условие if здесь. Потенциально, я хотел бы манипулировать заголовками внутри этого, если устанавливаю определенный CORS только для разрешенного источника.

Связанный контент