同一LAN内の自宅サーバーにアクセスするときは、 192.168.1.x
のようにローカルIPアドレスを指定してアクセス可能です。しかし、自宅サーバーで運用しているときは1つのサーバーで複数のサービスを運用しており、サブドメインで、どのサービスへのアクセスかを判別している場合があります。このような場合、IPアドレスの直打ちでは上手くいきません。IPアドレスの直打ちではなく通常のアドレス(myservice.example.comのように)を用いて、ローカルIPに解決させる必要があります。
nginx の server_name
ここでは、nginxを用いて、support.cosnomi.comとblog.cosnomi.comを1つのサーバーで動かしたいとします。このとき、Nginxはアクセスしてきたドメインごとに挙動を変える必要があるので、server_nameディレクティブを用いて各ドメインに対して設定します。
これはどのような仕組みかを簡単に説明すると、HTTPリクエストにはhostヘッダという情報が含まれていて、ここにはリクエスト時のホスト名が含まれています。だから、アクセス先のIPアドレスが同じでも、support.cosnomi.comとblog.cosnomi.comを見分けられるというわけです。(バーチャルホスト)
しかし、IP直打ちの場合はhostヘッダから判別できませんのでデフォルトのホスト(実ホスト)に行く、あるいは、エラーになります。
hosts ファイルの書き換え
となると、support.cosnomi.comでローカルの自宅サーバーにアクセスできれば良いわけですから、最も単純な方法だとDNSサーバーを設定するという話になりますが、これはやや面倒です。もちろん、DNSサーバーを立ててしまうのが正しいのだとは思いますが、ここではもっと簡単な方法として、アクセス元となるコンピュータ(クライアント)のhostsファイルを書き換えるという方法があるので、こちらを使ってみたいと思います。hostsファイルとはDNSより優先して名前解決に用いられるドメイン名とIPアドレスの対応表です。 Linuxの場合は、/etc/hosts
にあります。Windowsの場合は、C:\Windows\System32\drivers\etc\hosts
です。このファイルに次のように書き込めば、そのマシンからsupport.cosnomi.comは 192.168.x.x
に解決されます。
192.168.x.x support.cosnomi.com
もちろん、リクエストのhostヘッダにはsupport.cosnomi.comが与えられるのでバーチャルホストによるサービス振り分けは正常に機能します。
まとめ
LAN内のマシンにローカルIPアドレス直打ちではなくドメイン名でアクセスしたいがDNSには触りたくないという場合、アクセス元マシンのhostsファイルを編集することで、DNSに優先して名前解決させることができます。ファイル編集だけで済むので非常に簡単である一方、LAN内の他のマシンにも同じ設定をする必要があり、マシンの数が多い場合は手間がかかります。