nginx 設定ファイルで環境変数を使用する方法

nginx 設定ファイルで環境変数を使用する方法

序文

Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や lighttpd と比較すると、メモリ使用量が少なく、安定性が高いという利点があります。

nginx docker をデプロイする必要があるため、コンテナを起動する前に、nginx 構成ファイル内の server_name を動的に変更できることを期待します。
ただし、nginx 構成ファイルは環境変数の使用をサポートしていません。オンラインで多くの解決策を見つけ、最終的にenvsubstを使用して nginx 構成ファイルを書き換えることにしました。

仕組み

Nginx はカーネルとモジュールで構成されています。カーネルは非常に小さく簡潔で、その動作も非常にシンプルです。設定ファイルを参照して、クライアントのリクエストをロケーション ブロック (ロケーションは URL マッチングのための Nginx 設定のディレクティブ) にマッピングするだけです。このロケーションで構成された各ディレクティブは、対応する作業を完了するために異なるモジュールを起動します。

Nginx モジュールは構造的にコア モジュール、基本モジュール、サードパーティ モジュールに分かれています。

コアモジュール: HTTPモジュール、EVENTモジュール、MAILモジュール 基本モジュール: HTTPアクセスモジュール、HTTP FastCGIモジュール、HTTPプロキシモジュール、HTTPリライトモジュール、
サードパーティ モジュール: HTTP アップストリーム リクエスト ハッシュ モジュール、通知モジュール、HTTP アクセス キー モジュール。

envsubstを学ぶ

envsubst は、環境変数をファイル内の指定されたタグの値に置き換えます。
たとえば、次の内容のenv.confファイルがあります。

[テスト]
ip = ${ip}
ポート = ${port}
URL = http://${ip}:${port}/index.html
電話 = ${phone}

export ip=192.168.1.5export port=8081export phone=13522223334を実行すると、環境変数が書き込まれます。
次にenvsubst < env.conf > env.new.confを実行して次のenv.new.confを生成します。

[テスト]
IPアドレス = 192.168.1.5
ポート = 8081
URL = http://192.168.1.5:8081/index.html
電話番号 = 13522223334

一部の環境変数のみを置き換えるように指定することもできます。 source env.env && envsubst '$ip;$phone' < env.conf 、2 つの変数 ip と phone のみが置き換えられます。
上記は環境変数の一部のみを置き換えます。Linux のテストでは、一重引用符のみ使用できます。二重引用符は無効です。区切り文字, . ; |を試しましたが、これら 4 つはすべて OK です。他にも区切り文字があると思います。

nginx設定ファイルを適用する

docker-compose.ymlファイルは次のとおりです

バージョン: "3"
 
サービス:
  nginx:
    イメージ: nginx:1.20.1-alpine
    コンテナ名: nginx
    ポート:
      - 80:80
      -443:443
    環境:
      - NGINX_HOST=www.janbar.com
      - NGINX_PORT=80
    ボリューム:
      - /root/janbar.temp:/etc/nginx/conf.d/janbar.temp
    コマンド: /bin/sh -c "envsubst < /etc/nginx/conf.d/janbar.temp > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
    ネットワークモード: ブリッジ
    再起動: 常に

/root/janbar.tempファイルの内容は次のとおりです。

サーバー{
    ${NGINX_PORT} をリッスンします。
    [::]:${NGINX_PORT} をリッスンします。
    サーバー名 ${NGINX_HOST};

    位置 / {
        ルート /usr/share/nginx/html;
        インデックス index.html index.htm;
    }

    エラーページ 500 502 503 504 /50x.html;
    場所 = /50x.html {
        ルート /usr/share/nginx/html;
    }
}

上記のdocker-compose.yml設定ファイルに従って、dockerコンテナ内の設定ファイルは最終的に次のように生成されますcat /etc/nginx/conf.d/default.conf

サーバー{
    聞く 80;
    聞く [::]:80;
    サーバー名 www.janbar.com;

    位置 / {
        ルート /usr/share/nginx/html;
        インデックス index.html index.htm;
    }

    エラーページ 500 502 503 504 /50x.html;
    場所 = /50x.html {
        ルート /usr/share/nginx/html;
    }
}

要約する

上記の操作が完了すると、環境変数を通じて nginx docker コンテナの内部構成ファイルを更新できるようになります。ミッション完了!

上記は、nginx 設定ファイルで環境変数を使用する詳細です。nginx 環境変数の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • nginx を使用して分散電流制限を実装する方法
  • Nginx を使用して静的ページを展開する方法
  • Nginx プロキシを使用してインターネットを閲覧する方法
  • Nginx で CDN サーバーを構築する方法の詳細な説明 (画像とテキスト)
  • Nginx の動作モードとプロキシ設定の使用の詳細

<<:  MySQL の大文字と小文字の区別に関する注意

>>:  ウェブデザインにおける2種類のタブアプリケーション

推薦する

JavaScript でオブジェクトのプロパティを削除する方法

1. 削除delete は、オブジェクトのプロパティを残さずに削除する唯一の方法ですが、その「代替」...

jQueryはhide()とtoggle()関数を使用してカメラブランド表示の非表示機能を実現します。

最近、jQuery を学習しているときに、show()、hide()、toggle() 関数に出会い...

Zabbixを使用してMySQLを監視する方法

Zabbix 導入ドキュメントzabbix導入後zabbixエージェントの操作1. MySQLを監視...

Vueでルーティング権限を動的に設定する主なアイデア

以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとは...

HTMLで特殊記号を表示する(特殊文字対応表付き)

問題の再現HTML を使用して編集する場合、特殊記号によってエラーが表示されることが多く、極端な場合...

Idea は、Web プロジェクトを開始するように Tomcat を設定します。グラフィック チュートリアル

tomcatの設定1. 実行構成をクリック 2. tomcat localを選択 3. tomcat...

HTML+CSS ボックスモデルの例 (円、半円など) 「border-radius」はシンプルで使いやすい

多くの友人は、フロントエンドを学習するときに、ボックス モデルがデフォルトで正方形であることに気付き...

MySQL での実行計画の explain コマンド例の詳細な説明

序文explain コマンドは、クエリ オプティマイザーがクエリの実行を決定した方法を確認する主な方...

JavaプログラミングでJavaScriptの超実用的なテーブルプラグインを書く

目次効果ドキュメント最初のステップステップ2ステップ3ソースコード効果ドキュメント最初のステップta...

Vueの監視プロパティの詳細

目次1.watchは一般的なデータ(数値、文字列、ブール値)の変更を監視します。 1. 数値2. 文...

非常に詳細な基本的なJavaScript構文ルール

目次01 JavaScript(略称:js) js は 3 つの部分に分かれています。 JavaSc...

初心者向けのHTMLタグネストルールの詳細なまとめ

最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...

MySQL トリガー: トリガーの作成と使用

この記事では、例を使用して MySQL トリガーの作成と使用について説明します。ご参考までに、詳細は...

CSS3は、変換変形とイベントを組み合わせて扇形のナビゲーションを完成させます。

この場合、transition という単語を間違って書いたため、午後中ずっとそれに取り組みました。本...