dotCloud の sandbox 環境は無料(いつの間にかアプリ数の制限もなくなってる)なので、ちょっとした社内ツールを動かす場所にも使えそうですね。
dotCloud では、アプリのディレクトリに *nginx.conf
というファイルを置けばそれを server
セクションで読み込んでくれます。
ただ、罠として、 nginx にはリバースプロクシされたリクエストが来るので X-Forwarded-For
ヘッダを見るようにしないといけないのと、しかも IPv6 になってくるので 1.2.3.128/25
じゃなくて ::ffff:1.2.3.128/121
って書かないといけません。
ipaddr-nginx.conf
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
allow 1.2.3.128/25;
allow ::ffff:1.2.3.128/121;
deny all;
ただし、リバースプロクシのIPアドレスが不明なので、 set_real_ip_from
の範囲を広く設定してしまっています。
dotCloud のネットワーク構成を理解していないのですが、もし同じローカルネット内に他人の dotCloud 環境があれば、 X-Forwarded-For
を使ってアクセスできてしまいそうです。
あくまでもカジュアルな対策にとどめておいて、ちゃんとした認証も組み合わせて使ってください。
IPアドレスリストが長い時にこの設定ファイルを生成するスクリプトを書きました. python3 make_ipaddr_conf.py < iplist.txt > ipaddr-nginx.conf
みたいにして使ってください。
make_ipaddr_conf.py
import sys
print("set_real_ip_from 10.0.0.0/8;")
print("real_ip_header X-Forwarded-For;")
for L in sys.stdin:
L = L.strip()
if not L or L[0] == '#':
continue
print("allow", L + ';')
if '/' in L:
v4, subnet = L.split('/')
else:
v4, subnet = L, None
if subnet is not None:
print("allow ::ffff:%s/%d;" % (v4, int(subnet) + 96))
else:
print("allow ::ffff:%s;" % (v4,))
print()
print("deny all;")