LoginSignup
2
1

More than 5 years have passed since last update.

nginxで現在の時間をレスポンスするlocationディレクティブ

Last updated at Posted at 2018-07-23

これはなに

SPAやネイティブアプリなど、クライアントがサーバから独立している場合、時間情報はクライアントの情報を使うことになりがちです。
しかし、要件によってはサーバが指定する時間(あるいは運営者がコントロールしている時間情報)を指定したい場合があります。
その場合、Nginxでレスポンスすることでアプリケーションの負荷を下げることができます。

locationディレクティブ

location = /now.json {
    if ($msec ~ "(\d+)\.(\d+)") {
        set $unix_ts $1;
    }

    default_type  application/json;
    add_header Cache-Control "private, no-store";
    add_header Date $date_gmt;
    return 200 '{"unix": $unix_ts, "unix_msec": $msec, "iso8601": "$time_iso8601"}';
}

レスポンス

$ curl localhost/now.json -v
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /now.json HTTP/1.1
> Host: localhost
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.10.3 (Ubuntu)
< Date: Mon, 23 Jul 2018 02:50:13 GMT
< Content-Type: application/json
< Content-Length: 89
< Connection: keep-alive
< Cache-Control: private, no-store
< Date: Monday, 23-Jul-2018 02:50:13 GMT
<
* Connection #0 to host localhost left intact
{"unix": 1532314213, "unix_msec": 1532314213.183, "iso8601": "2018-07-23T02:50:13+00:00"}%

解説

  • JSONの時間データ
    • unixには秒単位のUnix Timestamp
    • unix_msecにはミリ秒単位のUnix Timestamp
    • iso8601にはISO 8601もしくはRFC 3339で定められた時間形式
  • DateヘッダにはRFC 850の時間が入る
  • Cache-controlでキャッシュの無効化
    • 要件とリクエスト数とCDNの有無よっては1秒程度のキャッシュは有効かも?
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1