Nginx 1つのドメイン名で複数のプロジェクトにアクセスする方法の例

Nginx 1つのドメイン名で複数のプロジェクトにアクセスする方法の例

背景

最近、複数のプロジェクトを展開する際に、1 つのドメイン名で複数のプロジェクトにアクセスする方法という問題に遭遇しました。ドメイン名の証明書の申請やドメイン名の設定を自分でやりたくなかったので、この解決策を考え、Nginx のロケーション機能と組み合わせて自分のニーズを実現し、記録しました。この例ではデモンストレーションに PHP プロジェクトを使用していますが、他の言語も同様の方法でデプロイできます。たとえば、ノード プロジェクトの場合、location で検証を実行し、porxy_pass リバース プロキシ モジュールを使用してそれを実装できます。

位置モジュールのマッチングの紹介

1. 「=」プレフィックス命令が一致します。一致が成功すると、他の一致は停止されます。

2. 通常の文字列命令マッチングでは、順序は長いものから短いものへで、マッチングに成功した場所で ^~ を使用した場合、他のマッチングは停止します (通常のマッチング)。

3. 正規表現の指示は設定ファイル内の順序で照合され、他の照合が成功した場合は停止されます。

4. 3 番目のステップで一致があった場合はその結果を使用し、一致がない場合は 2 番目のステップの結果を使用します。

注記

1. 一致順序は、最初に通常の文字列と一致し、次に正規表現と一致します。また、共通文字列のマッチング順序は、設定内の文字の長さに応じて長いものから短いものの順になります。つまり、共通文字列で設定された場所の順序は関係ありません。最終的には、nginx は設定の長さに応じてマッチングを行います。ただし、正規表現は設定ファイル内の順序でテストされることに注意してください。正規表現の最初の一致が見つかると検索は停止します。

2. 一般的に、通常の文字列の位置の一致が成功すると、正規表現の位置も一致します。この動作を変更するには 2 つの方法があります。1 つは「=」プレフィックスを使用することです。これは厳密な一致を実行し、リクエストの処理中に一致が成功した後すぐに他の一致を停止します。もう 1 つは「^~」プレフィックスを使用することです。このプレフィックスを通常の文字列に使用すると、パスが一致する場合に nginx に正規表現をテストしないように指示します。

場所 = /uri

= は完全一致を示し、完全一致のみが有効になります。

場所 ^~ /uri

^~ は URL パスのプレフィックス一致で始まり、正規表現の前にあります。

場所 ~ パターン

~ は大文字と小文字を区別する正規表現で始まります。

場所 ~* パターン

~* は大文字と小文字を区別しない正規表現で始まります。

場所/uri

修飾子がない場合、これもプレフィックス一致を意味しますが、正規表現一致の後の一致になります。

位置 /

ユニバーサル マッチングでは、他の場所と一致しないすべてのリクエストが一致します。これは、スイッチのデフォルトと同等です。

設定例

サーバー{
 聞く 80;
 サーバー名 test.com;
 インデックス index.html index.htm index.php;
 文字セット koi8-r;
 access_log /var/log/nginx/host.access.log メイン;

 #ドメイン名 + プロジェクト1の名前の場所 ^~ /a1/ {
   エイリアス /usr/share/nginx/html/a1/public/;
 }

 #ドメイン名 + プロジェクト2の名前の場所 ^~ /a2/ {
   エイリアス /usr/share/nginx/html/a2/public/;
 }

 エラーページ 404 /404.html;

 # サーバーのエラーページを静的ページ /50x.html にリダイレクトします
 
 エラーページ 500 502 503 504 /50x.html;
 場所 = /50x.html {
  ルート /usr/share/nginx/html/500.html;
 }

 #PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します
 
 場所 ~ \.php$ {
  ルートhtml;
  127.0.0.1:9000; をデフォルトとして設定します。
  fastcgi_index インデックス.php;
  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  fastcgi_params を含めます。
 }
 
 場所 ~ /\.ht {
  すべてを否定する;
 }
}

効果プレビュー

1. a1プロジェクトを訪問する

2. a2プロジェクトを訪問する

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • NginxはIPアクセスを禁止し、ドメイン名アクセスのみを許可します
  • 単一 IP、複数ドメイン名、複数サイトアクセスを実現するための Nginx+Tomcat の実装の詳細な説明
  • 異なるドメイン名への PC または携帯電話のアクセスを区別するように Nginx を構成する方法
  • Springboot+nginx+https+linux で負荷分散とドメイン名アクセスの簡単なテストを実現
  • マルチポートおよびマルチドメイン名アクセスのNginx構成の実装

<<:  Mysqlの自動増分IDについて知らないことがあるかもしれません

>>:  ネイティブJSを使用した遅延読み込みlazyLoadの3つの方法の概要

推薦する

メタタグの詳しい説明(メタタグの役割)

個人のウェブサイトがどんなに素晴らしいものであっても、サイバースペースの広大な海に浮かぶ小さなボート...

JSはBaidu Newsナビゲーションバーの効果を実現

この記事では、Baidu News Navigation Barの効果を実現するための具体的なJSコ...

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

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

three.js を使って立体的な矢印線を描く詳細な手順

需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...

Vue3 (III) ウェブサイトホームページレイアウト開発

目次1. はじめに2. 実際の事例1. App.vueを変更する2. レイアウトを調整する3. ジャ...

JavaScript配列の簡単な紹介

目次配列の紹介配列リテラル2次元配列要約する配列の紹介配列- Arrayもオブジェクトですこれは通常...

Tomcatを使用して共有ライブラリを設定し、同じjarを共有する

デプロイされるプロジェクトが増えるにつれて、Tomcat にデプロイされるリリース パッケージも増え...

MySQL 全文あいまい検索 MATCH AGAINST メソッドの例

MySQL 4.x 以降では、全文検索 MATCH ... AGAINST モード (大文字と小文字...

Mysql+JavaSwing に基づくスーパーマーケット商品管理システムの設計と実装

目次1. 機能紹介2. キーコード2.1 ホームページの機能2.2 製品情報を追加する2.3 データ...

React + Threejs + Swiper パノラマ効果を実現するための完全なコード

パノラマビュー効果を見てみましょう: 住所を表示スクリーンショット: 体験してみると、周囲の環境がぐ...

CSSリストのスライドにより、下部に隠れるのを防ぎ、長い画面モデルの処理に適応します。

1. モバイル端末がリストスライドを処理するとき、WeChat には下部にページに戻るボタンが組み...

MySQL における大規模オブジェクトのマルチバージョン同時実行制御の詳細な説明

MySQL 8.0: InnoDB のラージ オブジェクトに対する MVCCこの記事では、MySQL...

MySQL ベストプラクティス: パーティションテーブルの基本タイプ

MySQL パーティションテーブルの概要MySQL の人気が高まるにつれて、MySQL に保存される...

JavaScript で localStorage を使用する方法

.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...

MySQLデータベース移行におけるデータ文字化けの問題を解決する

リーダーの指示のもと、Java プロジェクトを引き継ぎ、リファクタリングを行う必要がありました。同時...