web-dev-qa-db-ja.com

Nginx:Apacheのother_vhosts_access.logファイルを複製してログ行の先頭でvhostを取得するにはどうすればよいですか?

Nginxを実行しているサーバーで複数のサイトをホストしています。すべての仮想ホストに個別のログファイルを使用したくはありませんが、各リクエストがどのNginx仮想ホストに属しているかをログから確認できるようにしたいです。これは、/ var/log/nginx /access.logで使用されるデフォルトのNCSA「結合」形式では不可能です。

Debian/Ubuntuの下のApacheは、デフォルトで/var/log/Apache2/other_vhosts_access.logにログを記録します。これには、vhost名が含まれますあります。 Nginx用にこれを複製するにはどうすればよいですか?

2
Alastair Irvine

次のスニペットを/etc/nginx/other-vhosts-access-log.confとして保存し、Nginxをリロードします。これにより、/ var/log/nginx /other_vhosts_access.logへのログ記録が開始されます。 (これにより、/ var/log/nginx/access.logへのログ記録が停止しません。)形式は同じです(NCSA「結合」形式)が、値はserver_name行の先頭。 vhostの名前が使用されることに注意してください。これは、要求されたホスト名と必ずしも同じではありません(エイリアスに追加のserver_nameディレクティブがある場合)。

# borrowed from Apache
# (Could use $Host instead of $server_name to log vhost aliases separately)
log_format vhost_combined '$server_name $remote_addr - $remote_user [$time_local] '
                          '"$request" $status $body_bytes_sent '
                          '"$http_referer" "$http_user_agent"';

# Define an access log for VirtualHosts that don't define their own logfile
access_log /var/log/nginx/other_vhosts_access.log vhost_combined

(ログローテーションに注意してください。ただし、これは/ var/log/nginx内のすべてのファイルについて、nginx-fullパッケージのlogrotateファイルでカバーする必要があります。)

警告:/ var/log/nginx/access.logへのログ記録を無効にしないでください上記の前にaccess_log off;を使用すると、後続のaccess_logステートメントが機能しなくなります。

2
Alastair Irvine