私はnginxを実行します。私のウェブサイトの1つの「サーバー」セクションには次のものがあります。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
set $app_name myapp;
set $app_port 4000;
ssl_certificate /etc/letsencrypt/live/$app_name.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$app_name.com/privkey.pem;
access_log /var/log/nginx/$app_name.com.access.log;
error_log /var/log/nginx/$app_name.com.error.log;
#.............
カスタム変数の1つ以上は確認されません。app_name
たとえば、ファイルが生成されます。/var/log/nginx/$app_name.com.access.log
つまり、$アプリケーション名内部に。
したがって、使用されている構成ファイルの他のすべての場所では解決されません。
「error.log」で変数値が空であることがわかります。
なぜできないの?どうすれば修正できますか?
答え1
どういうわけか動作させても、この方法を使用しないでください。
ファイルパスには変数(0.7.6+)を含めることができますが、これらのログにはいくつかの制限があります。
- ワーカープロセスで資格情報を使用するユーザーは、そのログを含むディレクトリにファイルを作成する権限が必要です。
- バッファリングされた書き込みは機能しません。
- ログが書き込まれるたびにファイルが開いて閉じます。ただし、頻繁に使用されるファイルの説明はキャッシュに格納される可能性があるため、open_log_file_cacheディレクティブの有効な引数で指定された時間だけ古いファイルへの書き込みが続行される可能性があります。
- [..]
そしてerror_log
変数をまったく受け入れないようです。
設定を作成するには、テンプレート/マクロ言語を使用することをお勧めします(私はm4を好みます。参考資料を参照man m4
)。
答え2
バッファログパスに変数を含めることはできません!
このようだエラー履歴デフォルトはバッファリングされたログです。
循環メモリバッファへのロギングは、「memory:」プレフィックスとバッファサイズを指定して設定でき、通常はデバッグに使用されます(1.7.11)。
したがって、error_log
次のようにパスで定義された変数には機能しません。
error_log /var/log/nginx/$app_name.com.error.log;
これは、またはパラメータが定義されているディレクティブにもaccess_log
当てはまります。buffer
gzip
一度設定すると
access_log /var/log/nginx/$app_name.com.access.log buffer flush=5m;
バッファログなので、変数名は解決されません。これにより Nginx エラーが発生します。
しかし、設定すると
access_log /var/log/nginx/$app_name.com.access.log;
明らかにこれはバッファログではなく、変数名を解決する必要があります。これがカスタム変数名の1つが解決される理由です。