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 にアップグレードする

推薦する

セマンティックタグを使用して、IE6、7、8と互換性のあるHTMLを記述します。

HTML5 では、ヘッダー、フッター、ナビゲーションなどのセマンティック タグが追加されているため...

JS配列インデックス検出におけるデータ型の問題の詳細な説明

WeChat アプレット プロジェクトを書いていたとき、その中に「都市選択」機能がありました。作者は...

openlayers6のマップオーバーレイの詳細な説明

1. オーバーレイの概要オーバーレイとは、その名の通り、別の形で地図上に表示される、覆うことを指しま...

Linux の一般的なテキスト処理コマンドと vim テキストエディタ

今日は、いくつかの一般的なテキスト処理コマンドとvimテキストエディタを紹介します。 3日目 - 一...

SQL Server データベース エラー 5123 の解決方法

なぜなら、SQL Server 2005 に基づくデータベース チュートリアルがあり、そこで使用され...

Webpackプラグインを書いてnpmに公開するための80行のコード

1. はじめに最近、 Webpackの原理を勉強しています。これまでは Webpack の設定方法し...

MySQL で指定エンコーディングを実装する際の落とし穴について

前面に書かれた環境: MySQL 5.7+、MySQL データベースの文字エンコードは utf8、テ...

jsを使用してシンプルな弾幕スクリーンシステムを実装する

この記事では、弾幕効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的な...

Tomcat サーバー入門の超詳細なチュートリアル

目次1. Tomcat の概念–1、サーバー–2、ウェブサーバー–3、Tomcatサーバー次にTom...

Nginx で IP と IP 範囲をブロックする方法

前面に書かれたNginx は単なるリバース プロキシおよび負荷分散サーバーではなく、電流制限、キャッ...

テーブルのネストと境界の結合の問題に対する解決策

【質問】外側のテーブルと内側のテーブルがネストされていて、内側のテーブルと外側のテーブルの両方に境界...

JavaScript 手ぶれ補正のケーススタディ

原理手ぶれ補正の原理は、イベントをトリガーすることはできますが、イベントがトリガーされてから n 秒...

VMware仮想マシンを使用してUbuntu 20.04をインストールする完全なチュートリアル

Ubuntu は比較的人気のある Linux デスクトップ システムです。最近、Ubuntu 20....

Vueのリストレンダリングの詳細な説明

目次1. v-for: 配列の内容を走査する(よく使われる) 2. v-for: オブジェクトのプロ...

MySQLとElasticsearch間のデータ非対称性問題の解決策

MySQLとElasticsearch間のデータ非対称性問題の解決策jdbc-input-plugi...