nginx設定の「サーバー」のカスタム変数は解決されません。

nginx設定の「サーバー」のカスタム変数は解決されません。

私は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当てはまります。buffergzip

一度設定すると

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つが解決される理由です。

関連情報