blog

Nginxマルチサーバーリバースプロキシ構成

Nginxの強力な正規表現のサポートは、あなたがマルチユーザブログを行いたい場合は、構成が非常に柔軟になるようにすることができ、各ユーザは、独自のセカンダリドメイン名を持って実現することも非常に簡単で...

Sep 27, 2014 · 9 min. read
シェア

Nginxの強力な正規表現サポートはserver_nameの設定を非常に柔軟にすることができ、もしマルチユーザブログをやりたいのであれば、各ユーザに独自のセカンドレベルドメイン名を持たせることも非常に簡単です。

server_nameの使い方については後述します:

サーバー名の一致順序

Nginx の server_name ディレクティブは主に名前ベースのバーチャルホスティングを設定するために使用され、server_name ディレクティブはそれぞれ要求された順番にマッチします:

1. サーバー名の完全一致:

server { 
listen 80; 
server_name ssdr.info www.ssdr.info; 
... 
} 

2.ワイルドカード文字 * で始まる文字列:

server { 
listen 80; 
server_name *.ssdr.info; 
... 
} 

3.ワイルドカード文字 * で終端する文字列:

server { 
listen 80; 
server_name www.*; 
... 
} 

4.正規表現にマッチします:

server { 
listen 80; 
server_name ~^(?.+)\.howto.org$; 
... 
} 

Nginx はサーバ名を 1,2,3,4 の順番でマッチさせ、どれか一つでもマッチすれば検索を止めますので、 このディレクティブを使うときはマッチする順番を明確にしてください。

server_nameディレクティブは非常に便利な機能は、キャプチャ関数の正規表現を使用することですので、設定ファイルを合理化しようとすることができます、すべての後に、長すぎる設定ファイルの毎日のメンテナンスも非常に不便です。ここでは2つの具体的なアプリケーションです:

サーバーブロックに複数のサイトを設定します:

server 
{ 
listen 80; 
server_name ~^(www\.)?(.+)$; 
index index.php index.html; 
root /data/wwwsite/$2; 
} 

サイトのホーム・ディレクトリはこのような構造になっているはずです:

/data/wwwsite/ssdr.info 
/data/wwwsite/linuxtone.org 
/data/wwwsite/.com 
/data/wwwsite/google.com 

これにより、1つのサーバーブロックだけで複数のサイトを構成することができます。

サーバーブロック内のサイトに複数の第2レベルドメイン名を設定する .

実際のサイトディレクトリ構造では、サイトの第2レベルドメイン名用に別のディレクトリを作成するのが普通ですが、通常のキャプチャを使用してサーバーブロック内に複数の第2レベルドメイン名を設定することでも同じことが実現できます:

server 
{ 
listen 80; 
server_name ~^(.+)?\.howto.org$; 
index index.html; 
if ($host = ssdr.info){ 
rewrite ^ http://..info permanent; 
} 
root /data/wwwsite/ssdr.info/$1/; 
} 

サイトのディレクトリ構造は以下のようにします:

/data/wwwsite/ssdr.info/www/ 
/data/wwwsite/ssdr.info/nginx/ 

後者のif文は、ssdr.infoの向きをwww.ssdr.info。これにより、サイトへのホームディレクトリへのアクセスが解決され、www.ssdr.info的域名权重 のseoも向上します。

複数の正規表現

server_nameでregularを使用し、次のlocationフィールドでregularマッチを使用する場合、$1, $2のような参照では動作しません。解決策は、setディレクティブで名前付き変数に代入することです:

server 
{ 
listen 80; 
server_name ~^(.+)?\.howto.org$; 
set $www_root $1; 
root /data/wwwsite/ssdr.info/$www_root/; 
location ~ .*\.php?$ { 
fastcgi_pass .1:9000; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME /data/wwwsite/ssdr.info/$fastcgi_script_name; 
include fastcgi_params; 
} 
} 

Nginx は異なるドメインを別のサーバにリバースプロキシします proxy_pass と $host

別のVPSのフロントエンドに専用のVPSを作りたい、バックエンドのVPSは、すべてのドメイン名を追加し、フロントエンドのVPSは、フロントエンドのVPSとして、同時にリバースプロキシにドメイン名を追加する必要があります一つずつバックエンドのVPSのドメイン名を追加する場合、このことは特に面倒ですが、自動的にバックエンドのVPSは、プロキシ_passと$ホストを使用して、それをリバースプロキシに許可することはできませんすることができます。簡単に実現できます。

次の例では、時間を節約するために lnmp をインストール環境として設定しています。

フロントエンド VPS の nginx.conf ファイルを以下のように変更します:

server { 
listen 80; 
server_name $host; 
location / { 
proxy_pass http://..gd/; 
proxy_set_header Host $host; 
proxy_redirect off; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_connect_timeout 60; 
proxy_read_timeout 600; 
proxy_send_timeout 600; 
} 

以下を一緒に修正してください。

location /.(php|php5)?$ 
{ 
fastcgi_pass unix:/tmp/php-cgi.sock; 
fastcgi_index index.php; 
include fcgi.conf; 
} 
location /status { 
stub_status on; 
access_log off; 
} 
location /.(gif|jpg|jpeg|png|bmp|swf)$ 
{ 
expires 30d; 
} 
location /.(js|css)?$ 
{ 
expires 12h; 
} 

これは、フロントエンドVPSは、ドメイン名がフロントエンドVPSに解決される限り、バックエンドVPSに任意のドメイン名をリバースプロキシすることができ、ドメイン名のバインディングのためのバックエンドVPSは、その後、直接アクセスすることができます有効になります。

1つのnginxに複数のドメインと複数のtomcatケースを設定します。

複数のドメイン名、そのうちの2つは汎ドメイン解決をサポートする必要があります:

1. www.abc.com

2. www.bcd.com

3. *.efg.com

4. *.hij.com

1,2,3は1つのtomcatで、4はスタンドアロンのtomcatです。フロントエンドには1つのnginxがあり、この配置は複数の仮想ホストを構成することで実現されます。

etc/nginx/conf.dディレクトリに移動します。ここにはすべてのバーチャルホストの設定ファイルが保存され、設定されています。

汎用ドメイン名のサポート設定

# 
# A virtual host using mix of IP-, name-, and port-based configuration 
# 
server { 
listen       81; 
server_name  *.efg.com; 
location / { 
proxy_pass "http://localhost:8080"; 
proxy_set_header   Host    $host; 
proxy_set_header   X-Real-IP   $remote_addr; 
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
} 
} 
# 
# A virtual host using mix of IP-, name-, and port-based configuration 
# 
server { 
listen       81; 
server_name  *.hij.com; 
location / { 
proxy_pass "http://localhost:8180"; 
proxy_set_header   Host    $host; 
proxy_set_header   X-Real-IP   $remote_addr; 
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
} 
} 

汎ドメイン解決の鍵は赤い部分です。 赤い部分がない場合、バックエンドの8080および8081ポートに対応するtomcatのバーチャルホストはドメイン名情報を取得できず、その結果、バックエンドのtomcatは対応するドメイン名情報を取得できません。

TOMCATが汎ドメイン解決をサポートしている場合、汎ドメインポインティングをサポートするためにホスト名をlocalhostに設定する必要があります。

Nginx マルチドメイン設定

nginxのバインディング複数のドメイン名は、複数のドメイン名のルールの設定ファイルを書き込むことができますが、また、複数のドメイン名の設定ファイルをビルドすることができます、私は一般的に管理の便宜のために、各ドメイン名は、ファイルをビルドするには、ドメイン名の同じ種類のいくつかは、一般的な設定ファイルに書き込むことができます。

まず nginx ドメイン設定ファイルの格納ディレクトリ /usr/local/nginx/conf/servers を開きます。ドメイン名 www.web126.com をバインドしたい場合は、このディレクトリに www.web126.com.conf というファイルを作成し、次のようにルールを記述します:

server 
{ 
listen       80; 
server_name www.web126.com;             #ドメイン名をバインドする 
index index.htm index.html index.php;      #デフォルトファイル 
root /home/www/web126.com;               #ウェブサイトのルートディレクトリ 
include location.conf;                            #他のルールを呼び出すには、また、削除することができる 
} 

その後、nginxサーバーを再起動すると、ドメインは正常にバインドされます。

Nginxサーバ再起動コマンド: /etc/init.d/nginx restart.

複数のドメインをファイルに追加する場合も同じルールが適用され、上記の単一ドメイン名を繰り返すだけでOKです:

server 
{ 
listen       80; 
server_name www.web126.com;             #ドメイン名をバインドする 
index index.htm index.html index.php;      #デフォルトファイル 
root /home/www/web126.com;               #ウェブサイトのルートディレクトリ 
include location.conf;                            #他のルールを呼び出すには、また、削除することができる 
} 
server 
{ 
listen       80; 
server_name msn.web126.com;             #ドメイン名をバインドする 
index index.htm index.html index.php;      #デフォルトファイル 
root /home/www/msn.web126.com;        #ウェブサイトのルートディレクトリ 
include location.conf;                            #他のルールを呼び出すには、また、削除することができる 
} 

301ジャンプを追加するには、wwwのないドメイン名の場合は、ドメイン名をバインドするのと同じですが、最初のwwwのないドメイン名をバインドするだけで、サイトのディレクトリを記述する必要はありませんが、301ジャンプなど:

server 
{ 
listen 80; 
server_name web126.com; 
rewrite ^/(.*) http://..com/$1 permanent; 
} 

404ページを追加することもできます:

server 
{ 
listen       80; 
server_name www.web126.com;             #ドメイン名をバインドする 
index index.htm index.html index.php;      #デフォルトファイル 
root /home/www/web126.com;               #ウェブサイトのルートディレクトリ 
include location.conf;                            #他のルールを呼び出すには、また、削除することができる 
error_page 404  /404.html; 
} 

次のように加工して、トップサーバーの上に置くだけです:

server{ 
listen   80 default; 
server_name      _; 
return 403; 
} 

以上の4つのルールを覚えれば、基本的にnginxのマルチドメイン設定問題を単独で解決することができます。

Read next

紙媒体はインターネットの一部となり、"ITマネージャーの世界 "からマネージャー+へ

インターネット革命はどこからでも来ています。伝統的なメディアは、どのように変化を生き残ることができますか?数日前、『中国出版メディア商報』の記者が『ITマネジャー世界』の編集長、李社氏と対談しました。李強は、「ITマネージャーワールド」は、マーケティングモデル、ユーザーサービスモデル、革新的なインターネット製品の3つの側面から、ビジネスモデルのブレークスルーを実現し、マネージャー+インターネットプラットフォームサービスプロバイダーに変身すると述べました。

Sep 26, 2014 · 6 min read