Tüm dizin isteklerini nginx'te tek bir dosyaya takma adlandırabilir miyim?


9

Belirli bir dizine yapılan tüm istekleri almak ve nginx bir yönlendirme olmadan bir json dizesi döndürmek anlamaya çalışıyorum.

Misal:

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

Beklenen Sonuç:

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}

İşte benim nginx conf şu ana sahip:

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

Ancak, istek yapmaya çalıştığımda Content-Type yapışmaz:

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

Bunu yapmanın daha iyi bir yolu var mı? Uygulama / json türünü nasıl yapıştırabilirim?

EDIT: Çözüm!

Ben sadece dönüş deyiminde manuel dizeleri gönderebilirsiniz, bu yüzden takma ad kullanmak yerine bunu anladım!

Kullandığım son kod:

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

Yanıtlar:


2

Catchall davranışını almak için bir yeniden yazma kullanabilirsiniz.

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

Bu sizi /logout.json'a yönlendirmiyor mu? 302 yönlendirme yanıtı göndermekten kaçınmaya çalışıyorum.
user749618

Hayır, bu dahili bir yeniden yazma . Yönlendirmeler yalnızca mutlak bir konum belirtilirse veya bir redirectveya permanentbayrak belirtilirse gönderilir.
mgorven

0

Çok basit. Tüm yapılandırma şunlar olabilir:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.