Czy mogę aliasować wszystkie żądania katalogu do pojedynczego pliku w Nginx?

9

Próbuję wymyślić, jak przenieść wszystkie żądania złożone do określonego katalogu i zwrócić ciąg json bez przekierowania w nginx.

Przykład:

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

Spodziewany wynik:

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}

Oto, co do tej pory mam w mojej nginx conf:

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

Jednak, gdy próbuję złożyć żądanie, Content-Type nie przykleja się:

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

Czy jest na to lepszy sposób? Jak mogę nakleić typ aplikacji / json?

EDYCJA: Rozwiązanie!

Doszedłem do wniosku, że możesz po prostu wysłać ręczne łańcuchy w instrukcji return, więc zrobiłem to zamiast używać aliasów!

Ostateczny kod, którego użyłem:

location /api {
    types { }
    default_type "application/json";
    return 200 "{\"logout\" : true"}";
}
użytkownik749618
źródło

Odpowiedzi:

2

Zamiast tego możesz użyć przepisywania, aby uzyskać zachowanie catchall.

location /logout.json {
    alias /tmp/logout.json;
    types {
        application/json json;
    }
}
rewrite ^/api/.* /logout.json;
mgorven
źródło
Czy to nie przekierowuje cię do /logout.json? Próbuję uniknąć wysłania odpowiedzi przekierowania 302.
user749618
Nie, to wewnętrzne przepisanie . Przekierowania są wysyłane tylko wtedy, gdy określono bezwzględną lokalizację lub określono flagę redirectlub permanent.
mgorven
0

Bardzo prosta. Cała konfiguracja może być:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
użytkownik1079877
źródło