Redmine が、リダイレクト先のURLを https:// で返すようにする方法はありませんでしょうか。


 Redmine を社内LANからデータセンターに移すことになったのですが、データセンターでは門番にSSLアクセラレータ兼リバースプロキシが構えており、外部(社内LAN)からのアクセスがHTTPSとなりました。
 ほとんどの機能はそのままで動くのですが、新規書き込みを行った後などにリダイレクトが入ると、リダイレクト先として http:// のURLを返してしまうらしく、データセンターでは HTTP 接続は受け付けていませんので、作業的に無応答となります。

 使用しているのは RedmineLE 0.1.0 です。
 Redmine 0.9.x / Ruby 1.8.7 / Ruby on Rails 2.3.4 が入っています。

何かいい方法がありませんでしょうか。教えてください。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/07/04 14:32:59
  • 終了:2014/07/07 09:05:08

ベストアンサー

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472014/07/04 15:01:25

ポイント150pt

「SSLアクセラレータ兼リバースプロキシ」が何か? ということで適切な方法が変わってくると思いますが、Redmine(にかぎらず、Rails アプリケーション)側としては「X_FORWARDED_PROTO」ヘッダを受け取れると辻褄が合うようになるようです。

FAQ - Redmine
ApacheをプロキシにしたRailsアプリでhttpsがリダイレクト時にhttpになる問題 - Qiita

上記ページに、リバースプロキシが Apache の場合での設定例が出ていますが、同じことが、実際にお使いの「SSLアクセラレータ兼リバースプロキシ」で出来れば、Redmine 側はそのままで良い事になると思います。

他1件のコメントを見る
id:JULY

この Apache での例は、リバースプロキシが Apache の場合なので、Redmine 側の Apacche の話ではないです。

> データセンターの所有物となり各社共用ですので設定をそう簡単には変えられません。

そうですかぁ。

一応、CISCO 製品のコンフィギュレーションでも

header insert request X-Forwarded-Proto header-value 'https'

といった感じで、同様の事ができそうな雰囲気でしたが、共用の機器だとデータセンター側が対応してもらえるか、という事になりますね。

Redmine 側の Apache で例の設定を入れて効果があるかどうかが微妙(おそらく、Apache httpd と rails の間は passenger という Apache モジュールでやりとりしているはずで、この Apache の設定で rails 側に渡る情報が意図したものになるかが不明)ですが、ダメ元でやっていみる価値はあると思います。

2014/07/04 16:50:25
id:izudon

情報ありがとうございます。
いただいた情報を頼りにいろいろ試しました結果、問題解決に至りました!

「Rails側としては X_FORWARDED_PROTO を受け取れればよい」という情報を
頼りにまずは Firefox に Modify Headers というプラグインを導入。

手動でヘッダ X_FORWARDED_PROTO を追加し、値 https を設定して
アクセスしたところ、期待の動作(https:// のURLへのリダイレクト)と
なることを確認しました。

次いで、RedmineLE をよく確認したところ、Apache に Passenger プラグイン
の構成ではなく、旧式の mongrel サーバで Rails を動かし、Apache は
mongrel に リバースプロキシする構成であることが判明。

 ブラウザ
  └ データセンタリバースプロキシ
     └ Apache(リバースプロキシ)  ←
        └ mongrel(Railsサーバ)

すなわち、(自社のコントロール下にある)Apache に設定をすることにより、
mongrel(Rails)に X_FORWARDED_PROTO ヘッダを渡せることがわかり、
リバースプロキシ設定の書かれたファイル apache/conf/conf.d/proxy.conf の
末尾に

RequestHeader set X_FORWARDED_PROTO 'https'
を追記したところ、見事に問題は解決しました。

おかげさまで、約30名ほどのユーザの不便を解消することができました。
有益な助言をありがとうございました。

  *   -   *   -   *

2014/07/07 08:58:58

その他の回答(1件)

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472014/07/04 15:01:25ここでベストアンサー

ポイント150pt

「SSLアクセラレータ兼リバースプロキシ」が何か? ということで適切な方法が変わってくると思いますが、Redmine(にかぎらず、Rails アプリケーション)側としては「X_FORWARDED_PROTO」ヘッダを受け取れると辻褄が合うようになるようです。

FAQ - Redmine
ApacheをプロキシにしたRailsアプリでhttpsがリダイレクト時にhttpになる問題 - Qiita

上記ページに、リバースプロキシが Apache の場合での設定例が出ていますが、同じことが、実際にお使いの「SSLアクセラレータ兼リバースプロキシ」で出来れば、Redmine 側はそのままで良い事になると思います。

他1件のコメントを見る
id:JULY

この Apache での例は、リバースプロキシが Apache の場合なので、Redmine 側の Apacche の話ではないです。

> データセンターの所有物となり各社共用ですので設定をそう簡単には変えられません。

そうですかぁ。

一応、CISCO 製品のコンフィギュレーションでも

header insert request X-Forwarded-Proto header-value 'https'

といった感じで、同様の事ができそうな雰囲気でしたが、共用の機器だとデータセンター側が対応してもらえるか、という事になりますね。

Redmine 側の Apache で例の設定を入れて効果があるかどうかが微妙(おそらく、Apache httpd と rails の間は passenger という Apache モジュールでやりとりしているはずで、この Apache の設定で rails 側に渡る情報が意図したものになるかが不明)ですが、ダメ元でやっていみる価値はあると思います。

2014/07/04 16:50:25
id:izudon

情報ありがとうございます。
いただいた情報を頼りにいろいろ試しました結果、問題解決に至りました!

「Rails側としては X_FORWARDED_PROTO を受け取れればよい」という情報を
頼りにまずは Firefox に Modify Headers というプラグインを導入。

手動でヘッダ X_FORWARDED_PROTO を追加し、値 https を設定して
アクセスしたところ、期待の動作(https:// のURLへのリダイレクト)と
なることを確認しました。

次いで、RedmineLE をよく確認したところ、Apache に Passenger プラグイン
の構成ではなく、旧式の mongrel サーバで Rails を動かし、Apache は
mongrel に リバースプロキシする構成であることが判明。

 ブラウザ
  └ データセンタリバースプロキシ
     └ Apache(リバースプロキシ)  ←
        └ mongrel(Railsサーバ)

すなわち、(自社のコントロール下にある)Apache に設定をすることにより、
mongrel(Rails)に X_FORWARDED_PROTO ヘッダを渡せることがわかり、
リバースプロキシ設定の書かれたファイル apache/conf/conf.d/proxy.conf の
末尾に

RequestHeader set X_FORWARDED_PROTO 'https'
を追記したところ、見事に問題は解決しました。

おかげさまで、約30名ほどのユーザの不便を解消することができました。
有益な助言をありがとうございました。

  *   -   *   -   *

2014/07/07 08:58:58
id:snow0214 No.2

snow0214回答回数470ベストアンサー獲得回数1162014/07/04 15:04:44

ポイント50pt

VirtualHostの設定の中にこの設定を追加してみてください。

RequestHeader set X_FORWARDED_PROTO 'https'

Redmineハマリメモ httpsのvirtualhostしてもどうしてもhttpにリダイレクトされる

http://d.hatena.ne.jp/stepupeng/20110221/1298291757

id:izudon

ご回答ありがとうございます。
外部ネットワークとデータセンタの境界に位置するSSLアクセラレータ兼リバースプロキシは、シスコ社製のハードウェアで、各社共用のため設定の変更が困難です。

Apache によるSSLやリバースプロキシなら、ネット上にそれなりにノウハウが散見されるのですが、今回そうでないために、難儀しています。

2014/07/04 15:32:34
id:izudon

質問文中の「SSLアクセラレータ兼リバースプロキシ」は、シスコ社製のハードウェアです。データセンターの所有物となり各社共用ですので設定をそう簡単には変えられません。

RedmineLE 付属の Apache の httpd.conf や、Redmine ないし Rails の設定ファイルやソースコードを一部変更することで対応できたりするのであれば、その方法を知りたいと思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません