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

推薦する

Docker 実行オプションを使用して Dockerfile の設定を上書きする

通常は、最初に Dockerfile ファイルを定義し、次に docker build コマンドを使...

Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策

一昨日、本番環境でGROUP_CONCAT関数を使用して選択したデータが切り捨てられ、最大長が102...

MySQL 8.0.22 のダウンロード、インストール、設定方法のグラフィックチュートリアル

参考までにMySQL 8.0.22をダウンロードしてインストールしてください。具体的な内容は次のとお...

React における同期および非同期 setState の問題のコード分析

React は Facebook の社内プロジェクトとして始まりました。 React の出現は革命的...

JSON.stringify の簡易版の実装とその 6 つの主要機能の詳細な説明

目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...

Vue Notepadの例の詳細な説明

この記事の例では、メモ帳機能を実装するためのVueの具体的なコードを参考までに共有しています。具体的...

Nginx でアンチホットリンクを設定するための手順を完了する

必要:通常、サイト側は、ウェブサイト上の動画や写真が盗まれるのを防ぎたいと考えています。結局のところ...

MySQL マスタースレーブ遅延問題の解決方法

今日は、マスタースレーブ遅延が発生する理由とその対処方法について説明します。しっかり座って出発の準備...

HTML ページ適応幅テーブル

WEB アプリケーションのページでは、テーブルがよく使用されます。列の数が限られているため、各列のコ...

mysqldump を使用した MySql のインポートおよびエクスポート方法の概要

データベースデータをエクスポートします:まずcmdを開いてMySQLのbinフォルダに入ります1. ...

koa2 サービスに SSL を設定する方法

I. はじめに1: SSL証明書私のドメイン名は Tencent Cloud にあります。第 3 レ...

MySQL開発標準と使用スキルの概要

1. 命名規則1. データベース名、テーブル名、フィールド名には小文字を使用し、アンダースコアで区切...

MySQL 外部キー (FOREIGN KEY) の使用例の詳細な説明

はじめに: すべてのデータを 1 つのテーブルに保存することのデメリット表の構成構造は複雑で不明瞭で...

960 グリッドシステムの基本原理と使用法

もちろん、CSS はフレームワークを必要とするほど高度ではないと考えて、反対の意見を持つ人もたくさん...

CSS を使用してテクスチャ付きグラデーション背景画像を記述するためのサンプル コード

プロジェクト内のページの長さはおよそ2000px以上あり、背景画像にはテクスチャやグラデーションがあ...