Bisakah saya alias semua permintaan direktori ke satu file di nginx?


9

Saya mencoba mencari cara untuk mengambil semua permintaan yang dibuat ke direktori tertentu dan mengembalikan string json tanpa arahan ulang, di nginx.

Contoh:

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

Hasil yang diharapkan:

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}

Inilah yang saya miliki sejauh ini di nginx conf saya:

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

Namun, ketika saya mencoba membuat permintaan, Tipe-Konten tidak menempel:

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

Apakah ada cara yang lebih baik untuk melakukan ini? Bagaimana saya bisa mendapatkan jenis aplikasi / json untuk tetap?

EDIT: Solusi!

Saya tahu Anda bisa mengirim string manual dalam pernyataan pengembalian, jadi saya melakukan itu alih-alih menggunakan alias!

Kode akhir yang saya gunakan:

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

Jawaban:


2

Anda bisa menggunakan penulisan ulang sebagai gantinya untuk mendapatkan perilaku catchall.

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

Bukankah ini mengarahkan Anda ke /logout.json? Saya mencoba menghindari mengirim 302 redirect response.
user749618

Tidak, itu penulisan ulang internal . Pengalihan hanya dikirim jika lokasi absolut ditentukan redirectatau permanentbendera atau ditentukan.
mgorven

0

Sangat sederhana. Seluruh konfigurasi dapat:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.