ローカルマシン上のWebアプリケーションにモバイル端末から名前解決してアクセスする
ローカルマシン上のWebアプリケーションにモバイル端末から名前解決してアクセスする
SREホールディングス株式会社システムディレクターの津田(啓)です。
今回はローカルマシンで実行しているWebアプリケーションに同一LAN上のモバイル端末から
名前解決しつつアクセスする方法についてご紹介します。
対象読者
- Web開発関係者
- ローカルマシンのWebアプリケーションに同一LAN上の別端末から名前解決しつつアクセスしたい人
環境
- MacOS Monterey 12.5 (Apple M2)
- Homebrew: 3.6.12
- Docker: 20.10.17-rd, build c2e4e01
- Docker Compose: v2.11.1
- Squid: stable 5.7 (bottled)
背景
通常であれば同一LAN上で公開しているWebアプリケーションにアクセスするには
以下のようにローカルマシンのIPアドレスを参照します。
http://192.168.1.5:8000
しかし単一のWebアプリケーション上で決められたドメインでルーティングしているケースなど
名前解決しながらアクセスしたい場合があります。
http://sample.domain.com:8000
そういったケースではForward Proxyサーバを使用することで
名前解決しながらローカルマシン上のWebアプリケーションにアクセスできるようになります。
Squidとは
SquidはオープンソースのPorxyサーバです。
Webサーバの前後に配置することで、リクエストをキャッシュしたり、Webサーバの負荷分散、アクセス制御、ロギングなどができるようになります。
今回はSquid経由でWebアプリケーションにアクセスすることでモバイル端末からでも名前解決しながらアクセスできるようにします。
Squidのインストール
今回はHomebrewでインストールします。
$ brew install squid
hostsの設定
名前解決するためにhostsファイルにIPアドレスとホスト名を追加します。
hostsファイルは通常であれば/etc/hosts
にあります。
127.0.0.1 sample.domain.com
Squidの設定
Homebrewでインストールした場合は以下の場所にSquidの設定ファイルがあります。
/opt/homebrew/etc/squid.conf
squid.conf
に以下を追記します。
visible_hostname UNKNOWN # ホスト名の秘匿
hosts_file /etc/hosts # 参照するhostsファイル
Squidの起動
設定が完了したらサービスを起動します。
$ brew services start squid # 自動起動の登録をしたい場合
$ brew services run squid # 自動起動が不要な場合
サービスを停止する場合はstopしてください。
$ brew services squid stop
hostsなどの設定ファイルはSquid起動時に読み込まれるため、
編集後はサービスを再起動してください。
$ brew services restart squid
モバイル端末のWi-Fi設定
iOS
- 設定→Wi-Fi→接続先を選択
- プロキシを構成→手動
- サーバにローカルマシンのローカルIPアドレスを設定 (例: 192.168.1.5)
- ポートにSquidで使用しているポートを設定 (defaultは3128)
Android
- 設定→ネットワークとインターネット→Wi-Fi
- 接続しているAPの設定→編集→詳細オプション
- プロキシ→手動
- プロキシのホスト名にローカルマシンのローカルIPアドレスを設定 (例: 192.168.1.5)
- プロキシポートにSquidで使用しているポートを設定 (defaultは3128)
アクセス
モバイル端末のブラウザを使用して、ローカルマシン上で起動しているWebアプリケーションにアクセスします。
例えば8000番ポートにWebアプリケーションを公開している場合は以下のようになります。
http://sample.domain.com:8000/
重くて表示されない場合
大体のケースではSquidを再起動すれば解決します。
モバイル端末とLANを合わせるために接続先を変更する場合は、接続先を合わせてから再起動してください。
$ brew services restart squid
再起動しても遅い場合はsquid.confのパラメータをチューニングすることで改善されるようです。
さいごに
squid, calamari, inkfish, devilfish, cuttlefishなど実はイカを意味する英単語はたくさんあるようです。
こちら導入も簡単なイカしたソフトウェアになりますので是非お試しください。
Discussion