Задать вопрос

Как в Nginx добавить заголовки в определённом location (для ответа API)?

Исходные данные:
server {
    ... 
    location / {
        ...
    }
    location /api/v1/ {
        ...
    }
    location ~ "^(.+\.php)($|/)" {
        ...
    }
}

Объявим заголовок , например:
add_header 'X-my-api-header' 'bla-bla-bla';

Требуется добавить этот заголовок для генерируемого api json или xml в location /api/v1/ .

Если заголовок добавить до описания правил для location, заголовок появляется, но для всего ресурса. Если его добавить для location api или location /, заголовок отсутствует в ответе сервера, но появляется если поместить заголовок в location php. Тогда заголовок появляется во всех ответах запросов к php-скриптам.

Так как API отдаёт данные в запрашиваемых форматах, пытался объявить заголовок для этих форматов, но тщетно. Возможно это происходит потому что выдачу данных генерирует php-скрипт. До этой задачки наивно полагал что знаю как работают настройки location.
  • Вопрос задан
  • 9629 просмотров
Подписаться 4 Оценить 2 комментария
Ответ пользователя justabaka К ответам на вопрос (4)
justabaka
@justabaka
Если 1 location, то можно if'ом, если нет опасений, что if is evil, как-то так:

if ($uri ~ ^/api/v1/.*){
add_header 'X-my-api-header' 'bla-bla-bla';
}

Если можно наплодить сколько угодно локейшенов, то копируем уже имеющийся в /api/v1/, настраиваем аналогично имеющемуся (fastcgi_pass и все такое) и добавляем заголовок.

А вообще, проще ставить заголовок силами PHP, чем заниматься таким извращением.
Ответ написан