同じポート・異なるドメインで処理を分けたい
やりたいこと
- 同じポートでアクセスする
- ドメインごとに処理を変えたい
こんなわがままを実現します。
有名どころの「Apache」「nginx」で解説します。
ドメインによって振り分け
実は同じポートを複数定義可能です。
シンプルに設定を2つ用意して、ドメインを書き分けるだけです。
Apache
Listen 80
<VirtualHost *:80>
# ドメイン指定
ServerName test1.com
# お好みの処理...
</VirtualHost>
<VirtualHost *:80>
# ドメイン指定
ServerName test2.com
# お好みの処理...
</VirtualHost>
nginx
server {
# 開放ポート
listen 80;
listen [::]:80;
# ドメイン指定
server_name test1.com;
# お好みの処理...
}
server {
# 開放ポート
listen 80;
listen [::]:80;
# ドメイン指定
server_name test2.com;
# お好みの処理...
}
仕組み
ドメイン一致に誘導
Apacheもnginxも、同じポート設定が定義してある場合、
「ドメインが一致する」設定に誘導されます。
完全一致のため、サブドメイン(www.*)等は別途定義が必要です。
ただし、ドメインが一致する設定がない場合の挙動は、
Apacheとnginxでは少し異なります。
Apacheでドメインが一致しない場合
ドメインごとに用意した「VirtualHost」設定。
その定義内、どこにも一致するドメインがなかった場合、
一番最初に定義された「VirtualHost」に入るようになっています。
一致しなかった場合、ダミーページを表示させたい場合は、
ダミーの設定を一番最初に定義してあげましょう。
ダミーのため、「ServerName」は何でも構いません。
Listen 80
<VirtualHost *:80>
# ダミードメイン指定
ServerName dummy
# お好みの処理...
</VirtualHost>
<VirtualHost *:80>
# 本命ドメイン指定
ServerName main.com
# お好みの処理...
</VirtualHost>
nginxでドメインが一致しない場合
nginxは一致しなかった場合の処理が、用意されています。
「listen」でポートを指定した後ろに
「default_server」を指定します。
「server_name」は「_」を指定しておきます。
Apacheのように定義順は関係ありません!
server {
# 開放ポート
listen 80;
listen [::]:80;
# 本命ドメイン指定
server_name main.com;
# お好みの処理...
}
server {
# 開放ポート
listen 80 default_server;
listen [::]:80 default_server;
# ダミードメイン指定
server_name _;
# お好みの処理...
}
まとめ
同じポート・異なるドメイン、で処理を分ける方法の紹介でした。
ちゃんといろんな人のやりたいことを実現できるサーバ、すごいですよね。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。