Posso alias tutte le richieste di directory su un singolo file in nginx?


9

Sto cercando di capire come portare tutte le richieste fatte in una particolare directory e restituire una stringa json senza reindirizzamento, in nginx.

Esempio:

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

Risultato atteso:

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}

Ecco cosa ho finora nella mia conf nginx:

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

Tuttavia, quando provo a fare la richiesta il Content-Type non si attacca:

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

C'è un modo migliore per farlo? Come posso applicare l'applicazione / tipo json?

EDIT: soluzione!

Ho capito che puoi semplicemente inviare stringhe manuali nell'istruzione return, quindi l'ho fatto invece di usare gli alias!

Codice finale che ho usato:

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

Risposte:


2

È possibile utilizzare una riscrittura invece per ottenere il comportamento catchall.

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

Questo non ti reindirizza a /logout.json? Sto cercando di evitare di inviare una risposta di reindirizzamento 302.
user749618,

No, questa è una riscrittura interna . I reindirizzamenti vengono inviati solo se viene specificata una posizione assoluta o se viene specificato un flag redirecto permanent.
mgorven

0

Molto semplice. L'intera configurazione potrebbe essere:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.