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種類のタブアプリケーション

推薦する

WeChatアプレットがユーザーの移動軌跡を記録

目次設定を追加json 構成レイヤー構成の表示論理層の構成位置追跡をオンにする録音を開始開始座標を決...

MySQLログシステムの使い方に関する簡単なチュートリアル

目次序文1. エラーログ2. バイナリログ1. バイナリログを有効にする2. バイナリログ形式3. ...

MySQL テーブル結合クエリでグループ化と重複排除を実装する例

目次ビジネスロジックデータテーブル構造クエリロジックSQL スクリプトスクリプトの説明ビジネスロジッ...

Dockerコンテナ同士を接続する3つの方法の詳しい説明

Docker コンテナ間の相互接続と通信には 3 つの方法があります。 Docker 内部ネットワー...

MySQLトリガーの使用と理解

目次1. トリガーとは何ですか? 2. トリガーを作成するトリガーを作成するための構文は次のとおりで...

HTML ページジャンプとパラメータ転送の問題

HTMLページジャンプ: window.open(url, "", "...

SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明

もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、こ...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

Dockerコンテナ終了エラーコードの手順

実行後、一部の Docker コンテナが終了することがあります。原因を調べるには、Docker コン...

Windows10 HomeバージョンにDockerをインストールするときに発生する問題の概要

Docker ダウンロード アドレス: http://get.daocloud.io/#instal...

Confluence と jira-software を Docker にデプロイする方法

バージョン: セントロス==7.2 jdk==1.8 合流==6.15.4 jira-ソフトウェア=...

HTML での非同期ファイルアップロードの例

コードをコピーコードは次のとおりです。 <form action="/hehe&qu...

Vue 3.0 カスタムディレクティブの使い方

目次1. カスタム指示1. グローバルカスタム指示を登録する2. グローバルカスタム指示を使用する3...

1つのコマンドで、シェルの読み取りコマンドの共通パラメータを理解できます。

Shell で受信パラメータを受信する方法は 2 つあることがわかっています。 1 つはスクリプト...

Vuex でゲッターとアクションを使用するための追加手順

予備的注釈1.Vue2.xとVue3.xの違い: Vue 3.x にはヘルパー関数はありません。 V...