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 ウェブページ入門開発詳細説明

パート3: ❤バックエンドデータ受信を見落とす3つの方法❤ (おすすめ集)パート 2: Web フォ...

Nginx try_files ディレクティブの使用例

Nginx の設定構文は柔軟で、高度に制御可能です。バージョン 0.7 以降では、try_files...

JavaScript セレクター関数 querySelector および querySelectorAll

目次1. querySelectorは単一の要素を照会する1. ドキュメントインスタンスの呼び出し2...

MySQL ストアド プロシージャ関連の権限変更の問題

MySQL データベースを使用すると、他のユーザーが定義したストアド プロシージャを他のユーザーが変...

海外でダウンロードできる25個の新鮮で便利なアイコンセット

1. Eコマースアイコン2. アイコンスイーツ2 3. 携帯電話アイコンパック4. 旗アイコンセット...

Nodejs 配列キューと forEach アプリケーションの詳細な説明

この記事では、Nodejs 開発プロセスで遭遇する配列の特性によって発生する問題と解決策、および配列...

Linux の traceroute コマンドの使用方法の詳細な説明

Traceroute を使用すると、情報がコンピュータからインターネットの反対側のホストまでたどるパ...

JS ES6コーディング標準の詳細な説明

目次1. ブロックスコープ1.1. let は var を置き換える1.2. グローバル定数とスレッ...

ServerManager の起動時にデータベースに接続できないエラーを解決する方法

Servermanager 起動時の接続データベース エラーmgrstart.batを実行しますエラ...

MySQLでレコードを変更する場合、更新操作フィールド = フィールド + 文字列

シナリオによっては、varchar 型のフィールドを変更する必要があり、変更の結果は 2 つのフィー...

静的ウェブサイトをRSSに変換するツール

<br /> この記事は allwebdesignresources.com から Ra...

SQL 実践演習: オンライン モール データベース ユーザー情報データ操作

オンラインショッピングモールデータベース - ユーザー情報データ運用プロジェクトの説明電子商取引の台...

qt.qpa.plugin の問題を解決: Ubuntu 18.04 の Qt で Qt プラットフォーム プラグイン「xcb」をロードできませんでした

問題の説明Qt5.15.0 をインストールした後、テスト ケースを実行するとエラーが表示されます。 ...

Windows Server 2016 AD サーバーをセットアップする手順 (画像とテキスト)

導入: AD は Active Directory の略称で、中国語では Active Direct...

HTML Selectは、デフォルトの選択を設定するためにselected属性を使用します。

オプションに属性 selected = "selected" を追加すると、それ...