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つの方法の概要

推薦する

Linux での tcpdump コマンド例の詳細な説明

序文簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

SQL インジェクションの詳細

1. SQL インジェクションとは何ですか? SQL インジェクションは、入力パラメータに SQL ...

React コードを共有するためのベストプラクティス

プロジェクトがある程度複雑になると、必然的にロジックの再利用の問題に直面することになります。 Rea...

Nexus を使用して jar パッケージをプライベート サーバーに追加する方法

なぜ Nexus プライベート サーバーを構築する必要があるのでしょうか。その理由は非常に簡単です。...

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...

Linux 上の MySQL 5.7 でパスワードを忘れる問題を解決する

1. 問題Linux 上の mysql5.7 のパスワードを忘れました2. 解決策• ステップ 1:...

TypeScript の基本型の紹介

目次1. 基本タイプ2. オブジェクトタイプ2.1 配列2.2 タプル2.3 オブジェクト3. 型推...

NginxにLuaモジュールを追加する方法

luaをインストールする http://luajit.org/download/LuaJIT-2.0...

MySQL 8.0.12 のインストールと環境変数の設定チュートリアル (Win10 の場合)

Windows 10 プラットフォームでの MySQL のインストール、構成、起動、ログイン、環境...

webpack -v エラー解決

背景webpackのバージョンを確認したいのですが、webpack -vを実行するとエラーが報告され...

LinuxでIPを表示する方法の例

ネットワークの問題のトラブルシューティング、新しい接続のセットアップ、ファイアウォールの構成を行うと...

HTML テーブルの行間隔を変更する方法の例

HTML テーブルを使用する場合、行間隔を変更する必要がある場合がありますが、余白、パディング、折り...

MySQL5.7+ MySQL Workbenchのインストールと設定方法のグラフィックチュートリアル(MAC)

この記事では、主にMACオペレーティングシステムでのMySQL5.7とMySQLWorkbenchの...

MySQL における ESCAPE キーワードの使用法の詳細な説明

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...