背景 会社のサブプロジェクトが増えるにつれて、さまざまなサイズのプロジェクトが10個以上になります(バックエンドのみ)。 元の慣例によると、開始されたプロジェクトごとに、対応するプロジェクトにマッピングされた第2レベルのドメイン名が必要です。 プロジェクトが10個あるということは、第2レベルのドメイン名が10個あることを意味します(テスト環境、サブプロダクション環境などは含みません)。 ドメイン名の数が多いと、管理が難しいだけでなく、さらに重要なことに、リソースの無駄になります。 この問題は長い間私を悩ませてきました。 今日、ついに解決しました。 ピットダイアリーを記録したいと思います。 この記事では、nginxの各命令の原理を説明するのではなく、実際のプロジェクト構成を使用して、nginx命令の使用方法を実践し、そこから学びます。 準備 ドメイン名 ドメイン名が http://www.dev.com であると仮定します。 実験環境 Alibaba Cloud ECS + CentOS + Nginx + PHP-FPM プロジェクト 1 1. プロジェクト パス: /data/wwwroot/project1/ プロジェクト2 1. プロジェクト パス: /data/wwwroot/project2/ プロジェクト3 1. プロジェクト パス: /data/wwwroot/project3/ 関連する知識ポイント
実装手順 上記のアクセス形式を実現するには、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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Mysql テーブル、列、データベースの追加、削除、変更、クエリの問題の概要
>>: CentOS で MySQL 5.1 を 5.5.36 にアップグレードする
Google Chinaは、ウェブサイトやブログを素早く簡単に多言語化できる翻訳ツールをリリースした...
どちらの方法も、一定時間後に JavaScript コードを実行するために使用できますが、それぞれに...
目次概要ジェネリック医薬品とはビルドシステムジェネリック医薬品の一般的な理解ジェネリッククラスジェネ...
シェルスクリプト #!/bin/sh # 現在のディレクトリ CURRENT_DIR=$( cd &...
目次成果を達成する完全なコード + 詳細なコメントまとめ成果を達成する完全なコード + 詳細なコメン...
1. コマンドの紹介tac (cat の逆順) コマンドは、ファイルの内容を行単位で逆順に出力します...
目次1. リバースプロキシの準備1. LinuxシステムにTomcatをインストールする2. Tom...
どの企業もユーザーベースを拡大したいのであれば、ユーザーの操作データを収集・分析する必要があり、その...
目次1. 古いバージョンを削除する2. サーバーのカーネルタイプを確認し、適切なバージョンをダウンロ...
序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...
説明 ソリューションVMware 15 仮想マシン ブリッジ モードではインターネットにアクセスでき...
この記事では、Linux MySQL 8.0.18のインストールと設定のグラフィックチュートリアルを...
シナリオ:一般的に使用される親コンポーネントと子コンポーネント間の相互作用方法は次のとおりです。親コ...
ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...
スクロール バーのスタイルを設定するための CSS 実装コードは次のとおりです。 •::-webki...