質問: 社用でGitLab+nginx(オム二版)をRedHutLinuxに入れて使おうと思っています。 しかし、ロードバランサ(LB)を介しているせいかうまく通信できません。 ブラウザ(Chrome、Firefox、IE)から **https**://hogehoge.jp:8443/ にアクセスすると、一度目はリダイレクトされたようで **http**://hogehoge.jp:8443/users/sign_in となりアクセスできません。 手動で**https**://hogehoge.jp:8443/users/sign_in と修正して、 やっとログイン画面にたどりつきます。 ログイン後も遷移によってhttpに変更され、何度も手で打ち直しています。 来週から社外パートナーに使用してもらう予定で、なんとかFIXしたいところです。 社内からのLBを介さないhttpでの直接通信は全く問題ありません。 下記構成で常にhttps通信させたいのですが、今できていません。 サーバへの何らかの設定で勝手にhttpに変わらずhttps固定にさせられないでしょうか? よろしくお願いします。 ### NW構成 外部インターネット----(http**s**)---->LB----(http)---->GitLabサーバ 1. LBが入りますがサーバは1台です。 1. 外部からはSSL通信をさせます。 1. LBにサーバ証明書を入れて復号化しています。後段はhttp通信です。 1. 外部からLBまではポート8443、LBからGitLabサーバまではポート80の平文通信です。 1. LBにはVIPを割付て、DNS登録しています。(123.456.7.8=hogehoge.jp) 1. サーバは実IPでDNS登録していませんがホスト名gitlab01をつけています。(123.456.7.50=gitlab01) ### サーバ設定 1. HTTP、80ポート使用 1. 専らhttp通信の設定を入れています。 1. gitlab.rbの設定 external_url 'http://hogehoge.jp' としています (このせいでリダイレクトされていると思い、httpsにしてみましたが、通信自体ができなくなります) ### サーババージョン * GitLab 7.9.4 * GitLab Shell 2.6.2 * GitLab API v3 * Ruby 2.1.5p273 * Rails 4.1.9 ### 補足 * 社内規定によりLBの証明書をはずして、直接サーバに入れることは極めて難しいです。 - 外部からサーバに直接アクセスさせるのも困難です。
回答: LB が Nginx ですか? それともバックエンドWebサーバーが Nginx ですか? バックエンドWebサーバーからの応答の Location ヘッダにリダイレクト先(http://〜)がありますので、LB で変換する必要があります。Apache httpd なら ProxyPassReverse、Nginx なら proxy_redirect です。 ``` (LB が Nginx の場合の設定例) proxy_pass http://backend.example.com/; proxy_redirect http://backend.example.com/ /; ``` バックエンドWebサーバーからの応答が「Location: http://backend.example.com/users/sign_in」ならば、「/users/sign_in」に変換し、プロトコル、ホスト名を補完して「Location: https://hogehoge.jp:8443/users/sign_in」でブラウザに返します。 LB が Nginx でない場合、LB に同等の機能はありませんでしょうか。