LINUX.ORG.RU
ФорумAdmin

Подскажите по непонятнке с nginx

 


0

2

Столкнулся с непоняткой при конфигурировании nginx. Работаю с ним давно и думал что он меня удивить не сможет, но ошибался.

Есть такой локейшн:

location / {
    if ($request_method = GET) {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    }

    try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_buffer_size 32k;
    fastcgi_buffers 4 32k;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php/php7.3-conf-fpm.sock;
    try_files $uri =404;
}


Так как в другом сабхосте были нужны ресурсы с этого - добавил add_header, чтобы CORS не ругался.

Статика заработала, второй хост корректно отобразил шрифты и прчоее.

Предполагал, что ничего более не изменится, но ошибался. Тут же отвалился API и по сути все вирт запросы (которые должны по try_files на php уходить) полетели в 404.

Проблему решил, выделив статику в другой локейшн и перенес хидеры туда. Но не могу понять, почему не работает указанная тут схема? Я думал что ко всем запросам тупо добавятся responce headers, но процесс обработки никак не поменяется.

★★★★★

Какая-нибудь if-магия nginx-а. Гугли «nginx if is evil».

Вообще вынос статики в отдельный локейшен это православно, так-что всё правильно сделал

MrClon ★★★★★ ()

В «if is evil» как раз твой случай описан.
Если условие истинно, то для обработки запроса будет использоваться внутренний блок if, до try_files дело не дойдет. Не все директивы из внешнего блока наследуются во внутренний, try_files из их числа.

bigbit ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.