1. ホーム
  2. nginx

nginxのログにフルレコードのURLが表示される

2023-10-10 07:46:12

質問

本番環境では、以下の nginx サイト設定ファイルを使っています。

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



server {
        root /srv/www/web;
        server_name *.test.com;
        access_log /var/log/nginx/xxx.test.com.access.log main;

ともに"。 http://a.test.com/ping "と" http://b.test.com/ping http リクエストは xxx.test.com.access.log ファイルに記録されます。

しかし、問題は nginx が xxx.test.com.access.log に "domain name" を保存していないことです。

"です。 http://a.test.com/ping "と" http://b.test.com/ping は、同じリクエスト "Get /ping" を共有しています。

nginx のログに "a.test.com" や "b.test.com" を記録するにはどうすればよいですか?

どのように解決するのですか?

を追加してみてください。 $host という変数をlog_formatに追加してみてください。

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

http://wiki.nginx.org/HttpCoreModule#.24host :

ホスト

この変数は、リクエストのヘッダ中のHost行、もしくはHostヘッダがない場合は もしHostヘッダがなければ、リクエストを処理するサーバの名前になります。 になります。

この変数は、このような場合には $http_host と異なる値を持つかもしれません。 このような場合 1) Host 入力ヘッダがないか、空である場合。 2) Hostの値がポート番号を含む場合、$hostはそのポート番号を含みません。 2) Hostの値がポート番号を含んでいる場合、$hostはそのポート番号を含まない。 0.8.17以降、$hostの値は常に小文字になります。