Puis-je alias toutes les demandes de répertoire vers un seul fichier dans nginx?


9

J'essaie de comprendre comment prendre toutes les demandes faites dans un répertoire particulier et retourner une chaîne json sans redirection, dans nginx.

Exemple:

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

Résultat attendu:

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}

Voici ce que j'ai jusqu'à présent dans ma conf nginx:

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

Cependant, lorsque j'essaie de faire la demande, le Content-Type ne colle pas:

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

Y a-t-il une meilleure manière de faire cela? Comment puis-je conserver le type d'application / json?

EDIT: Solution!

J'ai compris que vous pouvez simplement envoyer des chaînes manuelles dans la déclaration de retour, donc je l'ai fait au lieu d'utiliser des alias!

Code final que j'ai utilisé:

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

Réponses:


2

Vous pouvez utiliser une réécriture à la place pour obtenir le comportement catchall.

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

Cela ne vous redirige-t-il pas vers /logout.json? J'essaie d'éviter d'envoyer une réponse de redirection 302.
user749618

Non, c'est une réécriture interne . Les redirections ne sont envoyées que si un emplacement absolu est spécifié ou si un indicateur redirectou permanentest spécifié.
mgorven

0

Très simple. La configuration entière pourrait être:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.