私は、さまざまなモバイルデバイスや組み込みデバイスがアクセスするWebサイトを持っています。
多くの場合、一部のデバイスが接続できないという問題が発生します。
理由は次のとおりです。
デバイスが離れた場所にあるため、簡単にアクセスできるログがないので、nginxログでこのような問題を分析できるようにしたいと考えています。
これを行うには、デバッグするエラーログのログレベルを上げます。
error_log /var/log/nginx/errors_with_debug.log debug;
ただし、このログには、興味のないものがたくさん含まれています。
Ssl接続が拒否された場合にのみ詳細情報をログに記録する方法はありますか?
これまでのところ、debug
ロギングを有効にし、デバイスに問題があるリモートユーザーに接続してトレースを記録し、デバッグレベルを無効にし、nginxをリロードして、取得したトレースを分析するように依頼しています。
実際、SSLの問題が原因で接続に失敗したクライアントの日付とIPアドレスをログに記録できれば、すでに助けられています。
理想的には、理由もログに記録したいのですが、SSLが原因で接続が試行されたが失敗したことを知っていれば、非常に役立ちます。
言及したすべてのSSLハンドシェイクエラーは、nginxによってinfo
レベルでログに記録されるため、デバッグを有効にする必要はありません。
使用しているディストリビューションについては言及していませんが、最近のほとんどのシステムにはSystemDが付属しているため、ログを標準エラーにリダイレクトします。
error_log stderr info;
またはsyslog:
error_log syslog:server=/dev/log info;
systemd-journald がすべてのNginxログをキャプチャしてサイズを管理することを許可します。シンプルな:
journalctl -u nginx.service -a -p info
info
レベルより上のすべてのデバッグメッセージを一覧表示できます(syslogを使用する場合)。
特定のクライアントでさらにデータが必要な場合は、Nginxの debug_connection を使用できます。
events {
debug_connection 192.0.50.1;
...
}
質問で述べたように、すべてのクライアントに対してログレベルdebug
を設定すると、確かに大量の出力が生成されます。デバッグを有効にする必要がある場合は、サブシステムレベルで行うことができます。 error_log のドキュメントには記載されていませんが、このディレクティブはdebug
レベルの細かいサブディビジョンも受け入れます(cf. source code ):debug_core
、debug_alloc
、debug_mutex
、debug_event
、debug_http
、debug_mail
、debug_stream
。 debug_event
レベルに関心がありますが、error_log
ディレクティブにいくつか追加できます。例:
error_log syslog:server=/dev/log debug_http debug_event;
A:
B:
error_log syslog:server = unix:/var/log/nginx.sock debug;