質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

Q&A

解決済

3回答

6080閲覧

ロードバランサを使った場合のGITlabのサーバ設定(httpsとhttp)

DJR

総合スコア13

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

0グッド

2クリップ

投稿2015/06/25 13:56

編集2015/06/25 14:20

社用で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構成
外部インターネット----(https)---->LB----(http)---->GitLabサーバ
0. LBが入りますがサーバは1台です。
0. 外部からはSSL通信をさせます。
0. LBにサーバ証明書を入れて復号化しています。後段はhttp通信です。
0. 外部からLBまではポート8443、LBからGitLabサーバまではポート80の平文通信です。
0. LBにはVIPを割付て、DNS登録しています。(123.456.7.8=hogehoge.jp)
0. サーバは実IPでDNS登録していませんがホスト名gitlab01をつけています。(123.456.7.50=gitlab01)

###サーバ設定
0. HTTP、80ポート使用
0. 専らhttp通信の設定を入れています。
0. 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の証明書をはずして、直接サーバに入れることは極めて難しいです。
  • 外部からサーバに直接アクセスさせるのも困難です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

ありがとうございました。

Apacheをあげて、リバースプロキシを使いました。

投稿2017/09/19 10:18

DJR

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

LB が Nginx ですか? それともバックエンドWebサーバーが Nginx ですか?

バックエンドWebサーバーからの応答の Location ヘッダにリダイレクト先(http://〜)がありますので、LB で変換する必要があります。Apache httpd なら ProxyPassReverse、Nginx なら proxy_redirect です。

lang

1(LB が Nginx の場合の設定例) 2proxy_pass http://backend.example.com/; 3proxy_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 に同等の機能はありませんでしょうか。

投稿2015/06/25 15:36

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DJR

2015/06/25 16:15

TaichiYanagiyaさま ご回答ありがとうございます。 LBは当方の管理下になく、OS等の情報はわかりません。 バックエンドのWebサーバはnginxです。GitLabにバンドルされてインストールしたものです。完全ではありませんが、おっしゃった意味は少し理解できました。プロトコル、ホスト名を補完するのは、LBなんですよね。 やっぱりLBに手を入れる必要があるんですかね…。
guest

0

試していないのですが、
ここで議論されている内容からすると、以下の設定で実現できそうです。

  1. external_urlでhttpsを指定する。
  2. nginx['listen_https']をfalseに設定する。
  3. "X-Forwarded-Proto: https"と"X-Forwarded-Ssl: on"をリクエストヘッダに入れる様にロードバランサを設定する。

英語を誤読していたらすみません。

投稿2015/06/25 15:26

編集2015/06/26 15:19
eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DJR

2015/06/25 16:04

eripong様 ご回答ありがとうございます。こちらも詳細英語見てみます。 ただ、LBはこちらの管理下になく結構な手続きを要します。検証も難しくなんとかLBに手を入れず実現したいところです・・・。
eripong

2015/06/25 22:32

なるほど。 "X-Forwarded-Ssl: on"がリクエストヘッダに入れば良いので、 小細工になりますが、LBとGitLabサーバの間にプロキシを挟んで、 "X-Forwarded-Ssl: on"を追加してやれば、動くかもしれません。
eripong

2015/06/26 05:18

"X-Forwarded-Ssl: on"は、既にLBで追加されているかも知れないため、 手順としては不要かも知れません。 1.と2.だけ設定して、試してみても良いかと思います。 余裕があれば、tcpdumpなどでリクエストヘッダを確認して見ると良いかと。
eripong

2015/06/26 15:19

"X-Forwarded-Proto: https"も必要そうなので追記しました。
DJR

2015/06/27 05:23 編集

eripong様 追記ありがとうございました。1をhttpsにするとつなげなくなります。2はgitlab.rbに項目がなかったので追記しましたが、以前と状態変わらずでした。 GIT+nginxを積んでいるサーバのtcpdumpをとって、外部からLB経由でアクセスしたときの今のヘッダを確認してみました。 "X-Forwarded-Ssl: on"、"X-Forwarded-Proto: https"は入っていないようです。 LBにアクセスしたIPアドレスを示す"X-Client: 123.456.78.90"は入っていました。 引き続きサーバ側で何かできないか探って見ます。
eripong

2015/06/27 13:51 編集

ヘッダが入っていませんか。 https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md を見ても、ヘッダは必要そうです。 プロキシを挟むことも難しいでしょうか? また、「通信自体ができなくなります。」や「つなげなくなります」と言うのは、 ポートは開いているのでしょうか?それとも、エラー画面になる、 エラーログが出るなどでしょうか?
TaichiYanagiya

2015/06/27 16:14

AWS で用意されている AMI をさわってみました。 Nginx が gitlab unicorn のリバースプロキシーで、https を有効にすると、80番、443番で Listen し、443番で受けたときに "X-Forwarded-Ssl: on" ヘッダを付けてバックエンドに渡すよう設定されます(/var/opt/gitlab/nginx/conf/gitlab-http.conf)。 https を有効にしない場合、Nginx は 80番のみで Listen し、"X-Forwarded-Ssl: on" ヘッダは付きませんが、無理やり設定ファイルを修正してヘッダを付けるようにするとどうでしょうか。 server { listen *:80; (略) location /uploads/ { (略) proxy_set_header X-Forwarded-Ssl on; ★追加 proxy_pass http://gitlab; } location @gitlab { (略) proxy_set_header X-Forwarded-Ssl on; ★追加 proxy_pass http://gitlab; } } ※先頭の空白が消えてしまうかもしれません。 ただし、"gitlab-ctl reconfigure" を実行すると、設定がリセットされてしまうようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問