nginx を使用して 1 つのドメイン名で複数の Laravel プロジェクトを構成する方法の例

nginx を使用して 1 つのドメイン名で複数の Laravel プロジェクトを構成する方法の例

背景

会社のサブプロジェクトが増えるにつれて、さまざまなサイズのプロジェクトが10個以上になります(バックエンドのみ)。 元の慣例によると、開始されたプロジェクトごとに、対応するプロジェクトにマッピングされた第2レベルのドメイン名が必要です。 プロジェクトが10個あるということは、第2レベルのドメイン名が10個あることを意味します(テスト環境、サブプロダクション環境などは含みません)。 ドメイン名の数が多いと、管理が難しいだけでなく、さらに重要なことに、リソースの無駄になります。 この問題は長い間私を悩ませてきました。 今日、ついに解決しました。 ピットダイアリーを記録したいと思います。 この記事では、nginxの各命令の原理を説明するのではなく、実際のプロジェクト構成を使用して、nginx命令の使用方法を実践し、そこから学びます。

準備

ドメイン名

ドメイン名が http://www.dev.com であると仮定します。

実験環境

Alibaba Cloud ECS + CentOS + Nginx + PHP-FPM

プロジェクト 1

1. プロジェクト パス: /data/wwwroot/project1/
2. アクセスパス: http://www.dev.com/project1/

プロジェクト2

1. プロジェクト パス: /data/wwwroot/project2/
2. アクセスパス: http://www.dev.com/project2/

プロジェクト3

1. プロジェクト パス: /data/wwwroot/project3/
2. アクセスパス: http://www.dev.com/project3/

関連する知識ポイント

  • Nginx のロケーション ディレクティブの使用方法については、https://www.jb51.net/article/154637.htm を参照してください。
  • Nginx エイリアス ディレクティブの使用方法については、https://www.jb51.net/article/154640.htm を参照してください。

実装手順

上記のアクセス形式を実現するには、nginxのlocationディレクティブとaliasディレクティブを使用する必要があります。設定は次のとおりです。

場所 ^~ /${PROJECT}/ {
 エイリアス {$PATH};
 try_files $uri $uri/ @${PROJECT};

 場所 ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index インデックス.php;
  fastcgi_param SCRIPT_FILENAME $request_filename;
  fastcgi_params を含めます。
 }
}

場所 @${PROJECT}{
 /${PROJECT}/(.*)$ /${PROJECT}/index.php?/$1 を最後に書き換えます。
}

注: 上記の設定の ${PROJECT} と {$PATH} は、実際のプロセスで置き換える必要がある部分です。${PROJECT} は、project1 など、アクセスする必要がある URL のパス部分であり、{$PATH} は /data/wwwroot/project1 など、プロジェクトの実際のアクセス パスを表します。http://www.dev.com/project1 を例にとると、対応する Nginx 設定は次のようになります。

場所 ^~ /project1/ {
 エイリアス /data/wwwroot/project1/public;
 try_files $uri $uri/ @project1;

 場所 ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index インデックス.php;
  fastcgi_param SCRIPT_FILENAME $request_filename;
  fastcgi_params を含めます。
 }
}

場所 @project1{
 /project1/(.*)$ /project1/index.php?/$1 を最後に書き換えます。
}

project2とproject3の設定は、上記の設定テンプレートに従うだけで済みます。完全なnginx設定は次のとおりです。

サーバー{
 聞く 80;
 サーバー名 http://www.dev.com;
 access_log /data/wwwlogs/nginx/access_log/www.dev.com_nginx.log を結合します。
 error_log /data/wwwlogs/nginx/error_log/www.dev.com_errr_log;
 インデックス index.html index.htm index.php;

 # プロジェクト1の設定場所 ^~ /project1/ {
 エイリアス /data/wwwroot/project1/public;
 try_files $uri $uri/ @project1;
 場所 ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index インデックス.php;
  fastcgi_param SCRIPT_FILENAME $request_filename;
  fastcgi_params を含めます。
 }
 }
 
 場所 @project1{
 /project1/(.*)$ /project1/index.php?/$1 を最後に書き換えます。
 }
 
 # プロジェクト2の設定場所 ^~ /project2/ {
 エイリアス /data/wwwroot/project2/public;
 try_files $uri $uri/ @project2;
 
 場所 ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index インデックス.php;
  fastcgi_param SCRIPT_FILENAME $request_filename;
  fastcgi_params を含めます。
 }
 }
 
 場所 @project2{
 /project2/(.*)$ /project2/index.php?/$1 を最後に書き換えます。
 }
 
 # プロジェクト2の設定場所 ^~ /project3/ {
 エイリアス /data/wwwroot/project3/public;
 try_files $uri $uri/ @project3;
 
 場所 ~ \.php$ {
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index インデックス.php;
  fastcgi_param SCRIPT_FILENAME $request_filename;
  fastcgi_params を含めます。
 }
 }
 
 場所 @project3{
 /project3/(.*)$ /project3/index.php?/$1 を最後に書き換えます。
 }
 
 
 # すべての.phpを解析する
 場所 ~ \.php$ {
 fastcgi_pass unix:/dev/shm/php-cgi.sock;
 fastcgi_index インデックス.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 #fastcgi_param SCRIPT_FILENAME $request_filename;
 fastcgi_params を含めます。
 }
 
 #画像とビデオへのリンク。これはキャッシュ用で、30 日間キャッシュされ、アクセス ログの場所は書き込まれません ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
 有効期限は30日です。
 access_log オフ;
 }
 
 #js css ファイルの構成、ここにキャッシュがあります、7 日間キャッシュします、アクセス ログの場所を書き込まない ~ .*\.(js|css)?$ {
 有効期限は7日です。
 access_log オフ;
 }

 場所 ~ /\.ht {
 すべてを否定する;
 }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Laravel で .env 設定ファイルを変更する方法
  • PHPフレームワークLaravelをNginxで実行するための設定ファイルを共有する
  • Laravelフレームワーク環境と構成操作例の分析
  • Laravel フロントエンド リソース設定チュートリアル
  • Laravel 設定ファイルでグローバル変数を設定する例
  • Laravel データベースの読み取りと書き込みの分離設定方法
  • Laravel データベース暗号化とデータベース テーブル プレフィックスの設定方法
  • Laravel フレームワークのデータベース構成とデータベース操作の例
  • laravel-adminはモジュールと関連する基本的な設定メソッドを自動的に生成します。
  • Laravel 構成ルーティング API と Web 定義ルーティングの違いの詳細な説明
  • CKEditor5 を使用した Laravel5.6 フレームワークの詳細設定
  • Laravel 設定グローバルパブリック関数メソッドの手順
  • Laravel5 フレームワークのカスタムエラーページ設定操作例
  • Laravel で複数の Redis ライブラリを設定する方法
  • Laravel フレームワークの設定 404 およびその他の異常なページ
  • Laravel 5.5 公式推奨 Nginx 設定学習チュートリアル
  • Laravel Memcached キャッシュ ドライバーの設定と適用方法の分析
  • Laravel 5+ .env 環境設定ファイルの詳細な説明

<<:  Mysql テーブル、列、データベースの追加、削除、変更、クエリの問題の概要

>>:  CentOS で MySQL 5.1 を 5.5.36 にアップグレードする

推薦する

Google 翻訳ツール: 多言語ウェブサイトを素早く実装

Google Chinaは、ウェブサイトやブログを素早く簡単に多言語化できる翻訳ツールをリリースした...

JavaScript の setTimeout と setTimeinterval の使用例の説明

どちらの方法も、一定時間後に JavaScript コードを実行するために使用できますが、それぞれに...

TypeScript ジェネリックを簡単に説明する方法

目次概要ジェネリック医薬品とはビルドシステムジェネリック医薬品の一般的な理解ジェネリッククラスジェネ...

Vue+EChartsは、中国の地図の描画と省の自動回転と強調表示を実現します。

目次成果を達成する完全なコード + 詳細なコメントまとめ成果を達成する完全なコード + 詳細なコメン...

Linux tac コマンドの実装例

1. コマンドの紹介tac (cat の逆順) コマンドは、ファイルの内容を行単位で逆順に出力します...

Nginx リバース プロキシ学習例チュートリアル

目次1. リバースプロキシの準備1. LinuxシステムにTomcatをインストールする2. Tom...

WeChatアプレットの手動および自動追跡の実装の詳細説明(Taro)

どの企業もユーザーベースを拡大したいのであれば、ユーザーの操作データを収集・分析する必要があり、その...

Linux での MySQL のインストールに関するチュートリアル

目次1. 古いバージョンを削除する2. サーバーのカーネルタイプを確認し、適切なバージョンをダウンロ...

CentOS のクローン作成、Linux 仮想マシンの共有の完全な手順

序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...

VMware15 仮想マシン ブリッジ モードでインターネットにアクセスできない問題の解決方法

説明 ソリューションVMware 15 仮想マシン ブリッジ モードではインターネットにアクセスでき...

MySQL 8.0.18 のインストールと設定方法のグラフィック チュートリアル (Linux)

この記事では、Linux MySQL 8.0.18のインストールと設定のグラフィックチュートリアルを...

Vueカスタムコンポーネントは双方向バインディングを実装します

シナリオ:一般的に使用される親コンポーネントと子コンポーネント間の相互作用方法は次のとおりです。親コ...

MySQL のロックに関する問題

ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...

スクロールバーのスタイルを設定するための CSS サンプルコード

スクロール バーのスタイルを設定するための CSS 実装コードは次のとおりです。 •::-webki...