Столкнулся с непоняткой при конфигурировании 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, но процесс обработки никак не поменяется.