【概要】
nginxでリバースプロキシサーバを運用
- example.com/dir1/はs3のbucketに。
- example.com/dir2/は別のアプリサーバに。ここはapacheのデフォルトでアプリを運用している(バーチャルホストを使っていないということ)。
- example.com/dir3/は別サーバでバーチャルホストで運用しているドメインに。
【問題点】
httpでは問題なくリバースプロキシとして運用できた。
httpsでは1、2は問題なかったが、3だけ上手く行かなかった。
【まずは問題なくできた設定について】
(ポート80[httpアクセス]に対する設定)
- bucketに対する設定: 単純にproxy_passの設定だけ。
- 別アプリサーバに対する設定: 各種proxy_set_headerを設定して、proxy_passを設定。
- 別サーバのバーチャルホストで運用しているドメインに対する設定: 単純にproxy_passの設定だけ。
(ポート443[httpsアクセス]に対する設定)
- bucketに対する設定: 単純にproxy_passの設定だけ。httpsアクセスする。
- 別アプリサーバに対する設定: 各種httpヘッダをproxy_set_headerで設定して、proxy_passを設定。
【ポート443[httpsアクセス]に対する設定の3について】
- proxy_passだけ設定してみた。(httpsアクセスなので、proxy_passに設定するURLもhttps)
→ nginxの502エラーがでる。これはちょっと意味が分からなからない。 - proxy_passと各種httpヘッダをproxy_set_headerで設定する
→ 404エラーがでる。バーチャルホストを設定しているサーバに対して、該当のHostが認識されず、そのホストのdefaultの設定で処理されているっぽい。バーチャルホストのデフォルトではなくIPアドレスでアクセスされているかのような挙動をする。
httpsだとhostの値が渡されないという情報もweb上にあった。「httpディレクティブにproxy_set_headerを設定すれば良い」とあるが、この設定をしてもだめだったということ。 - proxy_passで、URLの指定をhttpとしてみたらエラーとならなかった。ただし、httpとしてリバースプロキシしているので、コンテンツの中にhttpコンテンツがあり、mixed_contentとなる。ものによってはjs等が正常に読み込まれずページが崩れたりする。