初めに
先日、入社二年目の後輩にhostsファイルについて聞かれたのでサラッと説明したのですが、残念ながら「???」という反応をされてしまいました。
次に聞かれたときに理解してもらえるように、最低限の知識をできるだけ分かりやすく書いてみたいと思います。
hostsファイルとは
何のファイル?
hostsファイルはホスト名とIPアドレスの組み合わせを管理しているファイルです。
組み合わせをhostsファイルに設定すると、ホスト名を自動的にIPアドレスに変換してくれます。この変換処理を「名前解決」と言います。
どこにあるの?
CentOSやUbuntuなどのLinuxなら
/etc/hosts
Windowsなら
C:\Windows\System32\drivers\etc\hosts
書き方は?
以下のように「IPアドレス」と「ホスト名」を半角スペースで並べて書きます。
#を記載すると、その行はコメントとして扱われます。
# IPアドレス ホスト名 別名
127.0.0.1 localhost
192.168.0.10 station10 station10.example.net
192.168.0.11 station11 station11.example.net
# コメントは#で書けます
上記設定だと、「station10」「station10.example.net」にアクセスすると、「192.168.0.10」に変換・アクセスします。
実際に使ってみよう!
文字だけの説明だと分かりにくいので、実際にhostsファイルを使ってみましょう。
事前準備
実演のために、2台のWebサーバーを作りました。Webブラウザからアクセスすると、以下のようにそれぞれのIPアドレスを表示します。
IPアドレスは「192.168.10.31」「192.168.10.32」なので、それぞれ31サーバー、32サーバーと呼ぶことにします。
31サーバーにアクセスした時の画面( http://192.168.10.31/ )
32サーバーにアクセスしたときの画面( http://192.168.10.32/ )
この2台のサーバーを「test_name」というホスト名とhostsファイルを利用して紐づけてみたいと思います。
hostsファイルの開き方
それでは、Windows10でhostsファイルを設定します。
もし、Linux環境を利用している場合は、
sudo vim /etc/hosts
で開いてください。
まず、以下の手順でメモ帳を管理者権限で実行します。
- 画面左下のWindowsマークをクリック
- 「Windows アクセサリ」をクリック
- 「メモ帳」を右クリック
- 「その他」をクリック
- 「管理者として実行」をクリック
- ユーザアカウント制御の確認が行われるので、「はい」をクリック
次に、メモ帳でhostsファイルを開きます。
-
「ファイル」タブにある「開く」をクリック
-
Cドライブ直下に移動し、「Windows」「System32」「drivers」「etc」と移動
hostsファイルにはデフォルトで使い方が書かれていますが、気にしないでください。
私のhostsファイルには、次のような記載がありました。
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
hostsファイルの設定
hostsファイルの下部に、次の設定を追記して保存します。
(32サーバーの設定はコメントアウトしています)
192.168.10.31 test_name
#192.168.10.32 test_name
この設定によって、「test_name」サーバーにアクセスすると、PCは自動的に「192.168.10.31」に変換し31サーバーにアクセスします。
実際にブラウザで「test_name」サーバーの画面を開くと、31サーバーの画面が開かれます。
今度はhostsファイルを以下のように変更して保存します。
31サーバーの設定をコメントアウトし、32サーバーの設定を有効にしました。
#192.168.10.31 test_name
192.168.10.32 test_name
この状態で「test_name」サーバーにアクセスすると、今度は「192.168.10.32」に変換し32サーバーにアクセスします。
このようにhostsファイルを利用すると、同じホスト名を利用しながら異なるサーバーにアクセスできます。
終わりに
今回はhostsファイルの機能を利用して、ホスト名「test_name」を31サーバー、32サーバーに振り分けました。
実際の開発では、開発・試験環境がローカルだったり、31サーバーだったり、32サーバーだったりします。環境変更のたびにURLを変更するのは大変なので、代わりにhostsファイルを書き換えることが多いです。
また、商用環境と検証環境でIPアドレスが異なる、といった環境差分を無くすために利用されます。
hostsファイル以外の名前解決のやり方としては「DNS」がメジャーです。hostsファイルに記載されてないホスト名(例えば、www.yahoo.co.jpなど)はDNSサーバーを利用して名前解決が行われます。
できるだけ短くと思いつつ長くなってしまいましたが、最後までご覧いただきありがとうございました。
「IT業界に入ったけど、hostsってなんだよ!」と思っている方が、少しでもイメージを持てるようになってくれたら幸いです。