Kann ich alle Verzeichnisanforderungen auf eine einzelne Datei in Nginx aliasen?


9

Ich versuche herauszufinden, wie alle in ein bestimmtes Verzeichnis gestellten Anforderungen in nginx eine JSON-Zeichenfolge ohne Umleitung zurückgegeben werden können.

Beispiel:

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

Erwartetes Ergebnis:

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}

Folgendes habe ich bisher in meiner Nginx-Konf.:

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

Wenn ich jedoch versuche, die Anfrage zu stellen, bleibt der Inhaltstyp nicht erhalten:

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

Gibt es einen besseren Weg, dies zu tun? Wie kann ich den Anwendungs- / JSON-Typ zum Festhalten bringen?

EDIT: Lösung!

Ich habe herausgefunden, dass Sie in der return-Anweisung nur manuelle Zeichenfolgen senden können, also habe ich das getan, anstatt Aliase zu verwenden!

Endgültiger Code, den ich verwendet habe:

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

Antworten:


2

Sie können stattdessen ein Umschreiben verwenden, um das Gesamtverhalten zu ermitteln.

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

Leitet Sie das nicht zu /logout.json weiter? Ich versuche zu vermeiden, eine 302-Umleitungsantwort zu senden.
user749618

Nein, das ist eine interne Umschreibung . Weiterleitungen werden nur gesendet, wenn ein absoluter Speicherort oder ein redirectoder permanentFlag angegeben ist.
mgorven

0

Sehr einfach. Die gesamte Konfiguration könnte sein:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.