nginxのリバースプロキシでスタックチャンのipに飛ばす。
スタックチャンを置く場所は店。呼び出し用端末は家に置く。取り急ぎは家からスタックチャンへの通信が通ればよい。店にはNTTルーターの下にもともとdockerのletsencript(ssl)対応なnginxのリバースプロキシがいる。こいつdocker-letsencrypt-nginx-proxy-companion。通常はnginxのリバースプロキシの後ろにdockerのwebサーバーなコンテナという構成になるもので、(あまり設定を頑張らないなら)webサーバーなコンテナからさらにスタックチャンに転送するのが楽。
家の端末(無線)->家の無線親機->家のNTTルーター ->インターネト回線 -> 店のNTTルーター -> リバースプロキシ->webサーバーなコンテナ->無線親機->スタックチャン
という通信経路。
やったこと(あとから書いているのでもれあるかも)
DNS登録
スタックチャンを呼び出すドメインのAレコードをDNSに登録。店は固定ipはないのでddnsを使用。ddnsサービスとかもあるそうだが昔作ったawsを使用するやつで運用。
店のルーターからリバースプロシキサーバへのipマスカレード設定
80番ポートと443番ポートが必要。環境に応じてファイヤウォールも適宜設定。
docker及びletsencript用コンテナを設定
基本こちらのまま。しばらく更新されていなそうなことに気づいた。ぱっとみDupricatedになってなさそうだけど開発ステータス確認したほうが良いかも。
webサーバーなコンテナ
composeファイル
version: '3.3'
services:
front:
build: ./front
restart: always
container_name: shop_momo_front
ports:
- 80
environment:
VIRTUAL_HOST: hoge.epea.co.jp
LETSENCRYPT_HOST: hoge.epea.co.jp
LETSENCRYPT_EMAIL: hoge@epea.co.jp
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
- default
- proxy_default
networks:
proxy_default:
external: true
dockerファイル
my_default.confに一部設定分けているのは深い意味はない。
FROM nginx
COPY default.conf /etc/nginx/conf.d/.
RUN echo 'server_tokens off;\n' \
> /etc/nginx/conf.d/my_default.conf
nginxの転送設定(default.conf)
192.168.1.nはスタックチャンがつながっている無線親機のwan側IP
# 無線ルーター親機(192.168.1.n)にスタックチャンへの転送設定追加
server {
listen 80;
server_name momoyama.epea.co.jp;
location / {
proxy_pass http://192.168.1.n;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
無線親機の設定
スタックチャンが固定IPじゃないとややこしいので無線LAN側IPをDHCPじゃなくて固定に変更。
また、やってきたリクエストをスタックチャンに振り分けるようにipマスカレード設定を追加。
スタックチャンが複数出てきたときはwebサーバーなコンテナのproxy_pass設定でportを分けてやって、ipマスカレードで振り分けたら何とかなるはず。
URLが雑なのでプロキシの振り分けがあとで困るかもしれないけど、使いながら考える。呼び出しの権限的なものは何もつけていないけど必要ならアクセストークン的なものなりするかnginx段階で何かするとかかな。