Posso alias todas as solicitações de diretório para um único arquivo no nginx?

9

Estou tentando descobrir como levar todas as solicitações feitas para um diretório específico e retornar uma string json sem redirecionamento, no nginx.

Exemplo:

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

Resultado esperado:

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}

Aqui está o que eu tenho até agora no meu nginx conf:

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

No entanto, quando tento fazer a solicitação, o Content-Type não fica:

$ 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}

Existe uma maneira melhor de fazer isso? Como posso manter o tipo application / json?

EDIT: Solução!

Eu descobri que você pode simplesmente enviar seqüências de caracteres manuais na declaração de retorno, então fiz isso em vez de usar aliases!

Código final que usei:

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

Respostas:

2

Você pode usar uma reescrita para obter o comportamento completo.

location /logout.json {
    alias /tmp/logout.json;
    types {
        application/json json;
    }
}
rewrite ^/api/.* /logout.json;
mgorven
fonte
Isso não o redireciona para /logout.json? Estou tentando evitar o envio de uma resposta de redirecionamento 302.
user749618
Não, isso é uma reescrita interna . Os redirecionamentos são enviados apenas se um local absoluto for especificado ou um sinalizador redirectou permanentfor especificado.
mgorven
0

Muito simples. Toda a configuração pode ser:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
user1079877
fonte