모든 디렉토리 요청을 nginx의 단일 파일로 별칭을 지정할 수 있습니까?


9

nginx에서 특정 디렉토리에 대한 모든 요청을 가져 와서 리디렉션없이 json 문자열을 반환하는 방법을 알아 내려고합니다.

예:

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

예상 결과:

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}

nginx conf에서 지금까지 가지고있는 내용은 다음과 같습니다.

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

그러나 요청을하려고 할 때 Content-Type이 고착되지 않습니다.

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

더 좋은 방법이 있습니까? 응용 프로그램 / JSON 유형을 고수하려면 어떻게해야합니까?

편집 : 솔루션!

return 문에 수동 문자열을 보낼 수 있다는 것을 알았으므로 별칭을 사용하는 대신 그렇게했습니다!

내가 사용한 최종 코드 :

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

답변:


2

대신 재 작성을 사용하여 포괄 동작을 얻을 수 있습니다.

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

/logout.json으로 리디렉션되지 않습니까? 302 리디렉션 응답을 보내지 않으려 고합니다.
user749618

아니요, 내부 재 작성 입니다. 리디렉션은 절대 위치가 지정되거나 redirect또는 또는 permanent플래그가 지정된 경우에만 전송됩니다 .
mgorven

0

매우 간단합니다. 전체 구성은 다음과 같습니다.

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

server {
  listen 80;
  rewrite ^.*$ /logout.json last;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.