ヘッダー画像

同じポート・異なるドメインで処理を分けたい

投稿 2022年10月30日 最終更新 2022年10月30日 専門用語多め

やりたいこと

  • 同じポートでアクセスする
  • ドメインごとに処理を変えたい

こんなわがままを実現します。

有名どころの「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 _;

  # お好みの処理...
}

まとめ

同じポート・異なるドメイン、で処理を分ける方法の紹介でした。

ちゃんといろんな人のやりたいことを実現できるサーバ、すごいですよね。

以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント

この記事のコメントはありません。