Чи можу я псевдонімати всі запити до каталогу до одного файлу в 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:

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

Однак, коли я намагаюся зробити запит, Тип вмісту не тримається:

$ 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 приклеюватися?

EDIT: Рішення!

Я зрозумів, що ви можете просто надіслати вручну рядки у зворотній заяві, тому я це зробив замість псевдонімів!

Кінцевий код, який я використав:

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

Відповіді:


2

Ви можете використовувати переписувати замість цього, щоб отримати поведінку catchall.

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

Це не перенаправляє вас на /logout.json? Я намагаюся уникати відповіді на переадресацію 302.
user749618

Ні, це внутрішнє переписування . Перенаправлення надсилаються лише в тому випадку, якщо вказано абсолютне місце розташування або вказано a 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.