はじめに
FortigateのSSL-VPNのWebモード接続の仕組みを見て、ふとNginxでこれを再現すれば社内Webサーバアクセス時の踏み台として便利に使えるのではと思い立ち、実装してみました。
丁度ISUCONでNginxをいじっていて、ある程度知見がたまってきたところだったということもあっての閃きでした。
なにがしたいのか
複数のWebサーバにアクセスしなければならないがWebブラウザからの経路(ポート番号含む)は一本に絞りたい。と考え、リバースプロキシに一旦集約したかったのです。
この手の役割は通常、フォワードプロキシに任せるのが一般的だと思いますが、クライアントPCには社内からInternetに抜けるために別のプロキシサーバを既に設定していましたし、クライアントPCにはなにも設定せず扱えるような便利な仕組みを作りたかったのです。
メリット
- Nginxを立てたサーバにさえアクセスできるようにすれば、そのサーバからアクセスできる場所へなら簡単にWebアクセスできます。
Config
server {
...
location ~^/http/(.*)$ {
proxy_pass http://$1$is_args$args ;
proxy_http_version 1.1 ;
}
location ~^/https/(.*)$ {
proxy_pass https://$1$is_args$args ;
proxy_http_version 1.1 ;
}
}
使用例
前提として、Nginxをexample.comの8888番ポートに建て、
Nginxがあるサーバからはhttp://X.X.X.X:XXXX/hogehoge にアクセス可能であるとします。
ブラウザで以下のようにURLを指定します。
http://example.com:8888/http/X.X.X.X:XXXX/hogehoge
HTTP over TLSなら、
http://example.com:8888/https/X.X.X.X:XXXX/hogehoge
最後に
意外と便利です。
少し冗長な書き方な気がしますが、とりあえず動作確認をしたところまで。
他にもいい方法があったら教えてください。