LoginSignup
2
1

More than 1 year has passed since last update.

hostsファイルを入社一年目に向けて説明してみる

Last updated at Posted at 2022-07-17

初めに

先日、入社二年目の後輩にhostsファイルについて聞かれたのでサラッと説明したのですが、残念ながら「???」という反応をされてしまいました。

説明している絵.png
hostsファイルについて簡単に説明している私(左)と理解できていない後輩(右)

次に聞かれたときに理解してもらえるように、最低限の知識をできるだけ分かりやすく書いてみたいと思います。

hostsファイルとは

何のファイル?

hostsファイルはホスト名とIPアドレスの組み合わせを管理しているファイルです。
組み合わせをhostsファイルに設定すると、ホスト名を自動的にIPアドレスに変換してくれます。この変換処理を「名前解決」と言います。

どこにあるの?

CentOSやUbuntuなどのLinuxなら
/etc/hosts

Windowsなら
C:\Windows\System32\drivers\etc\hosts

書き方は?

以下のように「IPアドレス」と「ホスト名」を半角スペースで並べて書きます。
#を記載すると、その行はコメントとして扱われます。

hosts
# 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/
image1.png

32サーバーにアクセスしたときの画面( http://192.168.10.32/
image8.png

この2台のサーバーを「test_name」というホスト名とhostsファイルを利用して紐づけてみたいと思います。

hostsファイルの開き方

それでは、Windows10でhostsファイルを設定します。

もし、Linux環境を利用している場合は、

sudo vim /etc/hosts

で開いてください。

まず、以下の手順でメモ帳を管理者権限で実行します。

  1. 画面左下のWindowsマークをクリック
  2. 「Windows アクセサリ」をクリック
  3. 「メモ帳」を右クリック
  4. 「その他」をクリック
  5. 「管理者として実行」をクリック
  6. ユーザアカウント制御の確認が行われるので、「はい」をクリック

次に、メモ帳でhostsファイルを開きます。

  1. 「ファイル」タブにある「開く」をクリック

  2. Cドライブ直下に移動し、「Windows」「System32」「drivers」「etc」と移動

  3. 右下の「テキスト文書(.txt)」を「すべてのファイル(.*)」に変更
    image5.png

  4. いくつかファイルが表示されるので、「hosts」ファイルを選択して「開く」をクリック
    image6.png

hostsファイルにはデフォルトで使い方が書かれていますが、気にしないでください。
私の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サーバーの設定はコメントアウトしています)

hosts
192.168.10.31  test_name
#192.168.10.32  test_name

この設定によって、「test_name」サーバーにアクセスすると、PCは自動的に「192.168.10.31」に変換し31サーバーにアクセスします。
実際にブラウザで「test_name」サーバーの画面を開くと、31サーバーの画面が開かれます。

「test_name」サーバーにアクセスしたときの画面( http://test_name/ )
image3.png

今度はhostsファイルを以下のように変更して保存します。
31サーバーの設定をコメントアウトし、32サーバーの設定を有効にしました。

hosts
#192.168.10.31  test_name
192.168.10.32  test_name

この状態で「test_name」サーバーにアクセスすると、今度は「192.168.10.32」に変換し32サーバーにアクセスします。

「test_name」サーバーにアクセスしたときの画面( http://test_name/ )
image8.png

このようにhostsファイルを利用すると、同じホスト名を利用しながら異なるサーバーにアクセスできます。

終わりに

今回はhostsファイルの機能を利用して、ホスト名「test_name」を31サーバー、32サーバーに振り分けました。
実際の開発では、開発・試験環境がローカルだったり、31サーバーだったり、32サーバーだったりします。環境変更のたびにURLを変更するのは大変なので、代わりにhostsファイルを書き換えることが多いです。
また、商用環境と検証環境でIPアドレスが異なる、といった環境差分を無くすために利用されます。

hostsファイル以外の名前解決のやり方としては「DNS」がメジャーです。hostsファイルに記載されてないホスト名(例えば、www.yahoo.co.jpなど)はDNSサーバーを利用して名前解決が行われます。

できるだけ短くと思いつつ長くなってしまいましたが、最後までご覧いただきありがとうございました。
「IT業界に入ったけど、hostsってなんだよ!」と思っている方が、少しでもイメージを持てるようになってくれたら幸いです。

参考

「/etc/hosts」ファイル - Linux技術者認定 LinuC | LPI-Japan

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1