Nginx reverse proxy
nginxでリバースプロキシーを利用しようとしてちょっと詰まったのでメモ。
XHRリクエストでCross-Originなリクエストを作りたい! それもXHR2.0とかjsonpとかiframeハックではなくて、他人のサイトを読み込むようなリクエストを作りたい!! ということでnginxのリバースプロキシーでムリヤリ実現します。(最低な方法ですが)
/etc/nginx/conf.d/proxy.conf
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; server { listen 80; server_name localhost; location ~ /http/(.*?)/(.*) { resolver 8.8.8.8; proxy_pass http://$1/$2; proxy_set_header X-Forwarded-Server $1; } }
まだ理解できていない箇所が多いですが、これで実現することができました。
http://localhost/http/example.com
こんなURLにアクセスすると
http://example.com
の情報を取得することができるようになります。
肝は proxy_set_header X-Forwarded-Server \$1;
としている箇所で、この行がないとIPで直接アクセスしてしまいvirtualhostで切り分けているようなサーバーに対応できなくなります。
でも、これで何で上手くいったかは不明です。
server名が上手く渡せてない感じがすると直感で付けたら上手くいってしまいました。
nginxが初めてということもあって、細々と分からない項目多いですね。 この辺りもう少し調べて覚えようかと思います。
TODO:
proxy_set_header
の内容調べる- nginxでのセキュリティ対策を調べる
- 呼び出し元のHTML以外から呼ばれないように対策を取る(踏み台対策)