Tôi có thể bí danh tất cả các yêu cầu thư mục cho một tệp trong nginx không?


9

Tôi đang cố gắng tìm ra cách đưa tất cả các yêu cầu được thực hiện vào một thư mục cụ thể và trả về một chuỗi json mà không cần chuyển hướng, trong nginx.

Thí dụ:

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

Kết quả dự kiến:

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}

Đây là những gì tôi có cho đến nay trong nginx conf của tôi:

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

Tuy nhiên, khi tôi cố gắng thực hiện yêu cầu, Kiểu nội dung không dính:

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

Có cách nào tốt hơn để làm điều này? Làm thế nào tôi có thể có được loại ứng dụng / json để gắn bó?

EDIT: Giải pháp!

Tôi đã tìm ra bạn chỉ có thể gửi các chuỗi thủ công trong câu lệnh return, vì vậy tôi đã làm điều đó thay vì sử dụng bí danh!

Mã cuối cùng tôi đã sử dụng:

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

Câu trả lời:


2

Bạn có thể sử dụng viết lại thay thế để có được hành vi bắt kịp.

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

Điều này không chuyển hướng bạn đến /logout.json? Tôi đang cố gắng tránh gửi phản hồi chuyển hướng 302.
user749618

Không, đó là một bản viết lại nội bộ . Chuyển hướng chỉ được gửi nếu một vị trí tuyệt đối được chỉ định hoặc một redirecthoặc permanentcờ được chỉ định.
mgorven

0

Rất đơn giản. Toàn bộ cấu hình có thể là:

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.