Могу ли я создать псевдоним всех запросов к каталогу в одном файле в nginx?


9

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

Пример:

curl -i http://example.com/api/call1/

Ожидаемый результат:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: application/json
Date: Fri, 13 Apr 2012 23:48:21 GMT
Last-Modified: Fri, 13 Apr 2012 22:58:56 GMT
Server: nginx
X-UA-Compatible: IE=Edge,chrome=1
Content-Length: 38
Connection: keep-alive

{"logout": true}

Вот что у меня есть в моем nginx conf:

location ~ ^/api/(.*)$ {
    index /api_logout.json;
    alias /path/to/file/api_logout.json;
    types { }
    default_type "application/json; charset=utf-8";
    break;
}

Однако, когда я пытаюсь сделать запрос, Content-Type не прилипает:

$ curl -i http://example.com/api/call1/
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: application/octet-stream
Date: Fri, 13 Apr 2012 23:48:21 GMT
Last-Modified: Fri, 13 Apr 2012 22:58:56 GMT
Server: nginx
X-UA-Compatible: IE=Edge,chrome=1
Content-Length: 38
Connection: keep-alive

{"logout": true}

Есть лучший способ сделать это? Как я могу получить приложение / тип JSON, чтобы придерживаться?

РЕДАКТИРОВАТЬ: Решение!

Я понял, что вы можете просто отправить ручные строки в операторе возврата, поэтому я сделал это вместо использования псевдонимов!

Финальный код, который я использовал:

location /api {
    types { }
    default_type "application/json";
    return 200 "{\"logout\" : true"}";
}

Ответы:


2

Вы можете использовать вместо этого переписать, чтобы получить общее поведение.

location /logout.json {
    alias /tmp/logout.json;
    types {
        application/json json;
    }
}
rewrite ^/api/.* /logout.json;

Разве это не перенаправляет вас в /logout.json? Я пытаюсь избежать отправки 302 перенаправления ответа.
user749618

Нет, это внутреннее переписывание . Перенаправления отправляются только в том случае, если указано абсолютное местоположение или указан флаг redirectили permanent.
mgorven

0

Очень просто. Вся конфигурация может быть:

# default.conf
# Add file here: /etc/nginx/html/logout.json

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.