Taglibro de miyacorata

Vi fine falos en la marĉon.

VirtualHostをLAN内のどこからでも見えるようにして快適開発をする話

ごきげんよう、まもなくクリスマスですが皆様いかがお過ごしでしょうか?宮野です。

この記事はNITKC ProLab Advent Calendar 2020](https://adventar.org/calendars/5345)を12月22日の記事として書かれています。

1日遅刻ですが課題と再試で記事どころではなかったのですまんかった

バーチャルホストを使う

バーチャルホスト(VirtualHost)は一つのサーバで複数のドメインを運用するためのヤツです。宮野は自宅のPCにApache2.4系を入れています。

php -S 0.0.0.0:3000 すりゃいい気もしますが、LAN内からいつでも見えてほしいツールもこのPCで動かしたいのでバーチャルホストを使ってApacheをちゃんと設定します。ちゃんと設定しとけば本番でも活用できるしね。

WindowsインスコしたApache2.4でバーチャルホストを使うには初期設定が必要です。

httpd.conf をいじる

バーチャルホストを使うにはまずApacheの設定の根幹であるところのhttpd.confをいじって設定を有効にする必要があります。httpd.conf の下の方をずずずっと見てみます。

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

ありました。Includeの前のコメントアウトを消してバーチャルホストの設定を読むようにします。

httpd-vhosts.conf をいじる

既に雛形がしっかりしている上コメントアウトでバッチリ解説してあるのでじゅんじゅんに読んでいきましょう。英語は気合で読め。

解説の通りここで設定したバーチャルホストのうち一番上にあるものがここで設定済みのサーバと一致しないすべてのリクエストに使われます。おうちサーバなら適当でいいかもですが本番環境で使うならばエラーを返すように設定するべきですね。

バーチャルホストの設定例はこんな感じ。

<VirtualHost *:80>
    ServerAdmin starrysky@dainsleif.miyacorata.net
    DocumentRoot "C:/Users/miyacorata/Documents/StarrySky/public"
    ServerName starrysky.dainsleif.f5.si
    ErrorLog "logs/starrysky.localhost-error.log"
    CustomLog "logs/starrysky.localhost-access.log" common
    <Directory "C:/Users/miyacorata/Documents/StarrySky/public">
        Require all granted
        AllowOverride all
    </Directory>
</VirtualHost>

ログ系はいらん人はいらんでもいいんじゃないかな しらんけど

ディレクトリの設定は書いておかないと特にAllowOverrideは.htaccessが聞かなくて泣きを見ます。

これでこのマシンに対して starrysky.dainsleif.f5.si でアクセスするとStarrySkyが開くようになりました。

LAN内からどこからでもアクセスしたい

さて、先程のセクションでServerNameを starrysky.dainsleif.f5.si にしていることにお気づきいただけるでしょう。starrysky.localhost とかじゃないんだ、と。

*.localhostでも同じことが出来ますが自機からのアクセスからしか出来ない上になんか増やしたらhostsを書き換える必要があります。それはあまりにもアホ。LAN内からアクセスできるようにしてスマホや別端末からのアクセスも可能にしたいものです。

じゃあLAN内にDNSサーバを立てる?めんどくさい。パス。

mDNS?だめです。starrysky.dainsleif.local みたいなの(Windowsだと)設定できないっぽいし。

じゃあどうすっかな思案したところであるサービスの存在を知りました。

xip.io というサービスがある

ちょっと調べてみると xip.io というサービスがあるらしいです。

xip.io

このサイトでできるのは実に単純で http://127.0.0.1.xip.io/ というふうにIPアドレスをくっつけてアクセスするとそのIPに飛ばしてくれるというものです。さらにサブドメインもぜんぶ飛ばしてくれるというスグレモノ。

とはいえ、IPが全部含まれるのは少々めんどくさいです。打ちづらいし。なにより見栄えが悪い。(見栄えを気にしてどうするんだというのはある)

しかし 宮野に 電流走る──

「適当なドメインを自機IPにポイントすればよいのでは?」

やることは実に単純明快です。まず自機のIPを固定、なにかほどよいドメインを用意し、そのドメインワイルドカード込みで自機IPにポイントするのみ。

普通のと違うのはローカルIPをポイントするためLAN内からしかアクセスできないという点です。

IPの固定

やるだけ。ONUまたはルータによってやり方が違うので取説をみましょう。

f:id:miyacorata:20201223114749p:plain

ドメインをご準備

なんかドメイン取得してもいい気がしますがここは横着します。

f:id:miyacorata:20201223115149p:plain

ddns.kuku.lu

DDNS NowというダイナミックDNSサービスを利用します。ダイナミックDNSというのは動的に変わるIPアドレスドメインを対応付けるためのシステムです。

が、普通に設定画面からAレコード設定できるので普通に使っちゃっています。全然ダイナミックじゃねえ。

f:id:miyacorata:20201223121027p:plain

で自機のIPにポイントします。

できました

f:id:miyacorata:20201223121541p:plain

f:id:miyacorata:20201223121613p:plain

自宅のWi-Fiに繋げばスマッホからも見れます。いいですね。

f:id:miyacorata:20201223124619p:plain

ファイル保存用ストレージであるところのDドライブの閲覧だけLAN内限定でできるようにしました。過去撮った写真見れます。わーい。

では~