Добавить заголовок к ответу в директиве местоположения nginx

Я пытаюсь добавить заголовок ответа только к одному указанному пути, и у меня есть конфигурация nginx

server {
    ...
    add_header x-test test;
    location /my.img {
        rewrite ^/my.img$ /119.img;
        add_header x-amz-meta-sig 1234567890abcdef;
    }
}

Но эффективен только заголовок верхнего уровня (x-test), который внутри директивы location не отображается так, как показано в

$ curl -v -o /tmp/test.img 'https://www.example.com/my.img'
< HTTP/1.1 200 OK
< Server: nginx/1.9.3 (Ubuntu)
< Date: Sun, 14 May 2017 23:58:08 GMT
< Content-Type: application/octet-stream
< Content-Length: 251656
< Last-Modified: Fri, 03 Mar 2017 04:57:47 GMT
< Connection: keep-alive
< ETag: "58b8f7cb-3d708"
< x-test: test
< Accept-Ranges: bytes
< 
{ [16104 bytes data]

Как отослать обратно пользовательский headrr только для конкретного обслуживаемого файла.

1 ответ

Решение

rewrite утверждение является неявным rewrite...last, что означает, что окончательный URI /119.img не обрабатывается этим location блок. К тому времени, когда заголовки ответа вычисляются, nginx в другом location блок.

Вы можете попробовать обработать окончательный URI из того же блока местоположения, используя rewrite...break заявление. Смотрите этот документ для деталей.

location = /my.img {
    root /path/to/file;
    rewrite ^ /119.img break;
    add_header x-amz-meta-sig 1234567890abcdef;
}

Если location предназначен для соответствия только одному URI, используйте = формат. Смотрите этот документ для деталей.

Отметим также, что наличие add_header утверждение в этом location блок, будет означать, что внешний оператор больше не будет наследоваться. Смотрите этот документ для деталей.:

Другие вопросы по тегам