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 が入っています。
何かいい方法がありませんでしょうか。教えてください。
「SSLアクセラレータ兼リバースプロキシ」が何か? ということで適切な方法が変わってくると思いますが、Redmine(にかぎらず、Rails アプリケーション)側としては「X_FORWARDED_PROTO」ヘッダを受け取れると辻褄が合うようになるようです。
FAQ - Redmine
ApacheをプロキシにしたRailsアプリでhttpsがリダイレクト時にhttpになる問題 - Qiita
上記ページに、リバースプロキシが Apache の場合での設定例が出ていますが、同じことが、実際にお使いの「SSLアクセラレータ兼リバースプロキシ」で出来れば、Redmine 側はそのままで良い事になると思います。
「SSLアクセラレータ兼リバースプロキシ」が何か? ということで適切な方法が変わってくると思いますが、Redmine(にかぎらず、Rails アプリケーション)側としては「X_FORWARDED_PROTO」ヘッダを受け取れると辻褄が合うようになるようです。
FAQ - Redmine
ApacheをプロキシにしたRailsアプリでhttpsがリダイレクト時にhttpになる問題 - Qiita
上記ページに、リバースプロキシが Apache の場合での設定例が出ていますが、同じことが、実際にお使いの「SSLアクセラレータ兼リバースプロキシ」で出来れば、Redmine 側はそのままで良い事になると思います。
この Apache での例は、リバースプロキシが Apache の場合なので、Redmine 側の Apacche の話ではないです。
> データセンターの所有物となり各社共用ですので設定をそう簡単には変えられません。
そうですかぁ。
一応、CISCO 製品のコンフィギュレーションでも
header insert request X-Forwarded-Proto header-value 'https'
といった感じで、同様の事ができそうな雰囲気でしたが、共用の機器だとデータセンター側が対応してもらえるか、という事になりますね。
Redmine 側の Apache で例の設定を入れて効果があるかどうかが微妙(おそらく、Apache httpd と rails の間は passenger という Apache モジュールでやりとりしているはずで、この Apache の設定で rails 側に渡る情報が意図したものになるかが不明)ですが、ダメ元でやっていみる価値はあると思います。
情報ありがとうございます。
いただいた情報を頼りにいろいろ試しました結果、問題解決に至りました!
「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'を追記したところ、見事に問題は解決しました。
VirtualHostの設定の中にこの設定を追加してみてください。
RequestHeader set X_FORWARDED_PROTO 'https'
ご回答ありがとうございます。
外部ネットワークとデータセンタの境界に位置するSSLアクセラレータ兼リバースプロキシは、シスコ社製のハードウェアで、各社共用のため設定の変更が困難です。
Apache によるSSLやリバースプロキシなら、ネット上にそれなりにノウハウが散見されるのですが、今回そうでないために、難儀しています。
この Apache での例は、リバースプロキシが Apache の場合なので、Redmine 側の Apacche の話ではないです。
> データセンターの所有物となり各社共用ですので設定をそう簡単には変えられません。
そうですかぁ。
一応、CISCO 製品のコンフィギュレーションでも
といった感じで、同様の事ができそうな雰囲気でしたが、共用の機器だとデータセンター側が対応してもらえるか、という事になりますね。
2014/07/04 16:50:25Redmine 側の Apache で例の設定を入れて効果があるかどうかが微妙(おそらく、Apache httpd と rails の間は passenger という Apache モジュールでやりとりしているはずで、この Apache の設定で rails 側に渡る情報が意図したものになるかが不明)ですが、ダメ元でやっていみる価値はあると思います。
情報ありがとうございます。
を追記したところ、見事に問題は解決しました。いただいた情報を頼りにいろいろ試しました結果、問題解決に至りました!
「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 の
末尾に
おかげさまで、約30名ほどのユーザの不便を解消することができました。
有益な助言をありがとうございました。
* - * - * 2014/07/07 08:58:58