cookieをログに出力

nginxにおいて表題の通り。

■ 環境

  • nginx 1.12.2

■ $http_cookie

nginx.conf“の”http“コンテキスト内にある”log_format“を編集する。今回は下記のようにした。

log_format  post  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" cookie[$http_cookie]';

ログには下記のように出力されるようになった。

XXX.XXX.XXX.XXX - - [06/Apr/2018:19:04:21 +0900] "GET /example/path HTTP/1.1" 200 1346 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" cookie[key1=value1; key2=value2]

ちなみに`curl`でcookieを送って確認するには下記のようにした。

$ curl -b "key1=value1; key2=value2" http://XXX.XXX.XXX.XXX/

以上。

PROPFIND Method

表題のMethodって何だ?となったのでメモ。

■ 環境

  • nginx 1.12.2

■ PROPFIND

今日たまたま気がついたのだが、下記のようなログが出力されていた。

XXX.XXX.XXX.XXX - - [05/Apr/2018:13:07:49 +0900] "PROPFIND / HTTP/1.1" 405 166 "-" "-"

PROPFIND“というMethodって何だ?”405“ってステータス何だっけ?と。

405 Method Not Allowed

PROPFIND“というMethodが許可されていないと。許可したつもりも存在すらも知らなかった。

PROPFIND Method
https://msdn.microsoft.com/ja-jp/library/aa142960

WebDAV“で使われるMethodのようである。無視ままで問題なさそうである。

以上。

request_time or upstream_response_time

nginxにおいて表題の件について。

■ 環境

  • nginx 1.12.2

■ upstream_response_time

先日のエントリにおいて、”request_time“と”upstream_response_time“が同じ数値になったと記載した。同一ホスト内でかと思い、他のホストにproxyしてみた。しかし結果はやはり同じ数値が記載された。

よくよく考えてみればnginx自体に掛かっている処理はほとんどなく、proxy先での処理と転送処理だけなので当然といえば当然の結果であった。nginx自体でもっといろいろな処理をしている場合にはこの数値は変わってくるのであろうか。

単なるメモである。

以上。

■ 関連

upstream_response_time

upstream_response_time

nginxにおいて表題の件。

■ 環境

  • nginx 1.12.2

■ upstream

upstream“モジュールを使ってproxyしている。処理時間を出したいなと思い調べてみると”log_format“に”upstream_response_time“を出力すれば良いようだ。

Module ngx_http_upstream_module
https://nginx.org/en/docs/http/ngx_http_upstream_module.html

log_format main '$http_x_forwarded_for - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '$request_time $upstream_response_time';

ログファイルには下記のようになった。

XX.XX.XX.XX - - [19/Feb/2018:19:08:51 +0900] "GET /login HTTP/1.1" 200 2175 "http://example.com/login/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" 0.043 0.043

今回は同一ホスト内へのproxyだったからか同じ数値になった。

以上。

■ 関連

nginxで処理時間をログに出力

Hostnameヘッダーが無い場合にレスポンスを返さない

nginxにおいて表題の通り。知らなかったのでメモ。

■ nginx

  • nginx 1.12.1

■ 444

How to prevent processing requests with undefined server names
http://nginx.org/en/docs/http/request_processing.html#how_to_prevent_undefined_server_names

上記に記載されていた。nginxでの独自ステータスコードとして”444“を返すようにすると、レスポンスを一切返さないようになるらしい。レスポンスはもちろん返らないのでアクセス元のクライアントからは何も返ってこない状態となる。

server {
    listen      80;
    server_name "";
    return      444;
}

なるほど。これは意外と便利そうである。

以上。