¿Puedo alias todas las solicitudes de directorio a un solo archivo en nginx?

9

Estoy tratando de descubrir cómo llevar todas las solicitudes realizadas a un directorio en particular y devolver una cadena json sin redireccionamiento, en nginx.

Ejemplo:

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}

Esto es lo que tengo hasta ahora en mi nginx conf:

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

Sin embargo, cuando trato de hacer la solicitud, Content-Type no se pega:

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

¿Hay una mejor manera de hacer esto? ¿Cómo puedo hacer que la aplicación / tipo json se pegue?

EDITAR: ¡Solución!

Me di cuenta de que puede enviar cadenas manuales en la declaración de devolución, ¡así que lo hice en lugar de usar alias!

Código final que utilicé:

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

Respuestas:

2

En su lugar, podría usar una reescritura para obtener el comportamiento general.

location /logout.json {
    alias /tmp/logout.json;
    types {
        application/json json;
    }
}
rewrite ^/api/.* /logout.json;
mgorven
fuente
¿No te redirige a /logout.json? Estoy tratando de evitar enviar una respuesta de redireccionamiento 302.
user749618
No, eso es una reescritura interna . Los redireccionamientos solo se envían si se especifica una ubicación absoluta o se especifica una marca redirecto permanent.
mgorven
0

Muy simple. Toda la configuración podría ser:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
usuario1079877
fuente