クライアント側の/etc/hostsに 192.168.1.10 www.example.com などの行を追加すればドメイン名でアクセスできる。
/etc/apache2/sites-available/に.confファイルを追加してa2ensiteすると仮想的なサーバーを追加できる。
「ローカルネットでノートPCをウェブサーバーに」で書ききれなかった Virtual Host について説明します。想定条件を繰り返します。
想定するOSはDebianまたはUbuntuで、Debian8 と Ubuntu18.04で検証しています。
Debian系のApache2の設定ファイルはなかなか合理的に分割管理されているのですが、他のディストリビューションでの書き方や、昔の書き方を混ぜて書いてしまっても大抵は動きますので、そのままウェブに解説記事となっていることもあります。ドキュメントはちゃんと読みたいものです。
Wi-FiルーターがDHCPになるローカルネットで、ノートPCをウェブサーバーに仕立てることを想定します。ノートPCを別のネットワークに移動しても働くように、DNSの存在を想定しません。
VirtualHostはサーバー名によって振り分けますから、DNSがない状態では難しくなります。アクセス元のホストのhostsファイルを設定できるようになっている場合は割と単純です。インターネットの黎明期の雰囲気を味わうことができます。DHCPまで自分で用意したり連携して簡易なDNSを用意するところまでは今回はやりません。
実際のURLのようにhogehpge.example.comのようなドメイン名を使いたい場合は、ドメイン名からIPアドレスを得る仕組みが必要になります。DNSサーバーに登録しておいて参照してもらうか、/etc/hostsファイルに書いておきます。
正確にはhogehpge.example.comとあったときにはhogehpgeがホスト名でexample.comがドメイン名なのですが、そうでない場合もありますし、全体をドメイン名というのだと強弁する人もいます。
具体的にadachi-CF-Y7のIPアドレスが192.168.1.10であったとして、これに別のコンピュータ(以降hostBとします)からアクセスしたい場合は、hostBの/etc/hostsに
192.168.1.10 hogehpge.example.com
などとします。もちろん adachi-CF-Y7.somedomain.or.jp でも、adachi-CF-Y7 だけでもいいかもしれません。要するに、/etc/hostsに書くのであれば、hostBから 192.168.1.10 のアドレスが得られるので、大抵の場合うまく行きます。ただし、ブラウザで検索単語と判断されたり、.comが忘れられていると判断されたりと、うまく行かない可能性もありますから、URLらしい形になっている方がいいでしょう。
このホスト名はインターネットに出さないでローカルに使うのであれば、登録をしていなくても、どこかのドメインの真似でもいいのですが、正式にインターネットに接続した時にトラブルにならないよう無難なものにしておきます。
最終的にこうしました。このサイトdabiyone.comのサブドメインという形です。外部DNSには登録していないので、正式なサブドメインとして機能しているわけではありません。ローカルネットワーク専用です。
192.168.1.10 cfy7.nan.dabiyone.com
ローカルなネットワーク内でコンピュータがたくさんあるのであれば、ドメイン名を統一して、ホスト名をホストごとにユニークに決めておき、一覧を/etc/hostsに書いておくのがよいでしょう。インターネットの黎明期にはこのようにしていました。ネット内のホストが少ない時は簡単ですが、ホストの増加に伴い、これが面倒になってDNSの仕組みができました。ローカルなネットワークでもDNSを動かすこともできます。これはこれで便利です。
パス名/ファイル名 /etc/hosts を次のファイルと読み替えてください。
C:\Windows\System32\drivers\etc\hosts
追加する行については、Linuxと代わりはありません。
編集には管理者権限が必要です。
デフォルトのサーバーの設定はアクセスしてきたもの全て、デフォルトのドキュメントルートである /var/www/html/ ですが、ホスト名でアクセスするようにできるなら、ホスト名によってドキュメントルートを振り分けることができます。そこで/var/www/htmlはそのままに、これとは別に /srv/www/html をドキュメントルートにしてサイトを構築してゆく方法を説明します。
まず、設定のフォルダの確認
adachi@adachi-CF-Y7:~$ ll /etc/apache2/ 合計 80 -rw-r--r-- 1 root root 7224 9月 16 21:58 apache2.conf drwxr-xr-x 2 root root 4096 12月 19 02:51 conf-available/ drwxr-xr-x 2 root root 4096 12月 19 02:51 conf-enabled/ -rw-r--r-- 1 root root 1782 7月 17 03:14 envvars -rw-r--r-- 1 root root 31063 7月 17 03:14 magic drwxr-xr-x 2 root root 12288 12月 19 02:51 mods-available/ drwxr-xr-x 2 root root 4096 12月 19 02:51 mods-enabled/ -rw-r--r-- 1 root root 320 7月 17 03:14 ports.conf drwxr-xr-x 2 root root 4096 12月 19 02:51 sites-available/ drwxr-xr-x 2 root root 4096 12月 19 02:51 sites-enabled/
サイトのドキュメントルートなどは、sites-available に設定されています
adachi@adachi-CF-Y7:~$ ll /etc/apache2/sites-available/ 合計 12 -rw-r--r-- 1 root root 1332 7月 17 03:14 000-default.conf -rw-r--r-- 1 root root 6338 7月 17 03:14 default-ssl.conf
sites-enabled にリンクがあります。
adachi@adachi-CF-Y7:~$ ll /etc/apache2/sites-enabled/ 合計 0 lrwxrwxrwx 1 root root 35 12月 19 02:51 000-default.conf -> ../sites-available/000-default.conf
sites-enabledに置かれた*.confというファイルが有効になりますが、sites-availableにファイルを作成しておいてリンクを作ることで設定の有効/無効を簡単に切り替えられるようになっています。これに従わずに書き加えていっても動きますが、知っていると便利です。
000-default.confには次のような内容が書かれています。
#ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html
http://adachi-cf-y7/では /var/www/html/index.htmlが表示される。ということです。
ディレクトリ構成から見る方針に合わせて、これをコピーして書き換える。
adachi@adachi-CF-Y7:/etc/apache2/sites-available$ sudo cp 000-default.conf 001-cfy7.conf
001...にはServerNameの設定をします。DocumentRootも変更します。
ServerName cfy7.nan.dabiyone.com DocumentRoot /srv/www/html
この設定はcfy7.nan.dabiyone.comという名前でアクセスしてきたら、/srv/www/html内のデータを閲覧させるという設定です。名前がcfy7.nan.dabiyone.comでなければ、000...の/var/www/htmlが使用されます。
「ローカルネットでノートPCをウェブサーバーに」の繰り返しになりますが、「It works!」のページの中に、デフォルトでは、/var/www、/usr/share(Webアプリケーション用)以外にあるファイルへのWebブラウザ経由のアクセスを許可ないこと、他の場所(/srvなど)をドキュメントルートとする場合は、/etc/apache2/apache2.confのホワイトリストに登録する必要があることを注意しています。
apache2.conf の中には、親切にも
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> #<Directory /srv/www/> # Options Indexes FollowSymLinks # AllowOverride None # Require all granted #</Directory>
とありますので、#を削除すれば、/srv/www以下のアクセスを許可することが簡単にできます。
表示すべき内容も用意します。DocumentRootにあわせてフォルダを作り、所有者を変更。index.htmlもコピーして最低でも、/srv以下にアクセスしたことがわかるように内容を変更します。
adachi@adachi-CF-Y7:/etc/apache2/sites-available$ sudo mkdir -p /srv/www/html adachi@adachi-CF-Y7:/etc/apache2/sites-available$ sudo chown adachi: /srv/www/html/ adachi@adachi-CF-Y7:/etc/apache2/sites-available$ ll /srv/www/ 合計 4 drwxr-xr-x 2 adachi adachi 4096 12月 20 17:41 html/ adachi@adachi-CF-Y7:/etc/apache2/sites-available$ cp /var/www/html/index.html /srv/www/html/ adachi@adachi-CF-Y7:/etc/apache2/sites-available$ vi /srv/www/html/index.html
設定ファイルの変更を有効にするため、シンボリックリンクを作る作業をすればOKです。でも、それをするためのコマンドもあります。カレントディレクトリに気を使わなくてもいいので楽です。a2で始まるコマンド(apache2だから)です。忘れたらtabを使ってa2で始まるコマンドを補完で出すことができます。
adachi@adachi-CF-Y7:/etc/apache2/sites-available$ a2 a2disconf a2dismod a2dissite a2enconf a2enmod a2ensite a2query
a2ensiteです。実行すると、
adachi@adachi-CF-Y7:/etc/apache2/sites-available$ sudo a2ensite 001-cfy7.conf Enabling site 001-cfy7. To activate the new configuration, you need to run: systemctl reload apache2
apache2のリロード方法が示されるので従えばOKです。サーバーを止める必要はありません。
昔ながらの/etc/init.d/で始まる方法も使えます。systemdになってinitではないのですけど、昔の記憶でやってしまってもできるようにしてくれています。確認すると、
adachi@adachi-CF-Y7:/srv/www/html$ ll /etc/init.d/apache2 -rwxr-xr-x 1 root root 8181 7月 17 03:14 /etc/init.d/apache2* adachi@adachi-CF-Y7:/srv/www/html$ /etc/init.d/apache2 --help Usage: apache2 {start|stop|graceful-stop|restart|reload|force-reload}
なので昔の方法でもできますね。
でも素直にsystemctlに従ってみます。
adachi@adachi-CF-Y7:/etc/apache2/sites-available$ systemctl reload apache2
これはsudoを忘れています。でも、ダイアログが出てパスワードを要求されるだけで済みました。
apach2では002...の設定も可能です。数字で始まるのはたぶん設定の順番ということでしょう。001...ではcfy7.nan.dabiyone.comというホストを定義したのですが、002...というファイルにwww.nan.dabiyone.comを設定すれば、もう一つホストがあるかのように振る舞います。ですから、sites-available内の設定ファイルには、VirtualHostという文言が入っています。
002...には例えば次のように設定します。
ServerName www.nan.dabiyone.com DocumentRoot /srv/www2/html
こんど設定はwww.nan.dabiyone.comという名前でアクセスしてきたら、/srv/www2/html内のデータを閲覧させるという設定です。ホスト名とフォルダ名が合致しないので混乱するかもしれませんが、自由に決められるということです。フォルダの場所も深さも自由です。ただしothorsの読み取り権限はついていないといけません。
DNSを立てていなければ、hostBの/etc/hostsにwww.nan....を加えておく必要があります。
192.168.1.10 cfy7.nan.dabiyone.com 192.168.1.10 www.nan.dabiyone.com
apach2のVirtualHostの設定には、まだまだバリエーションがあって、IPアドレスや、ポート番号によっても切り分けることができます。
クライアントはURLのホスト名+ドメイン名からIPアドレスを探します。大抵の場合まず/etc/hosts内を探して見つからなければDNSに問い合わせます。上の例では192.168.1.10でネットワーク内を探してサーバーにたどり着きます。その後でURLによりページを要求することになります。
apache2は、URLにあるホスト名(+ドメイン名)によって、sits-enabled にある設定ファイル内の ServerName から一致するものを探して、見つかれば対応するドキュメントルートを採用します。一致するものがなければ最初の設定ファイルのドキュメントルートを採用します。000-default.confが000で始まるのはこれが最初に読まれるためです。ファイル名のASCIIコード順で読み込まれますから。
したがって000-default.confのServerNameはどうでもいいのですが、2つ目以降になるConfファイル内にはServerNameがしっかりと書かれている必要があります。