すべてのディレクトリ要求をnginxの単一のファイルにエイリアスできますか?


9

特定のディレクトリに対して行われたすべてのリクエストを取得し、リダイレクトなしでjson文字列をnginxで返す方法を理解しようとしています。

例:

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}

これを行うより良い方法はありますか?application / 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 2012

いいえ、それは内部の書き換えです。リダイレクトは、絶対位置が指定されているか、redirectまたはpermanentフラグが指定されている場合にのみ送信されます。
mgorven 2012

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.