自前でRedmine環境を持っていて、RedminePM(スマホ向けのRedmineクライアント)でつなごうと思ったところ…。SERVER ERROR(302) …
と表示され繋がりませんでした…。困ったなぁと思って、他の人にも接続を確認したところ…
Gさん「iPhoneで接続できました」
naou「WHY?! (´・ω・`)」
現時点で最新版のRedmine(3.4.6.stable)を使用しているので、対応していないかな?とも疑いましたが、リクエストを返したアクションは、GitHub上で確認すると、6年前から変更がない…ということでアプリが非対応、というわけではなさそう…。
うーん…SSLの証明書の問題?も疑いましたが、ログインアクションまでたどり着いているのでそれはなさそう…。
仕方なくログを眺めていると
…
redirect to h t t p : //…
….
…おまえかー。
うちのRedmine環境は、Let’s Encrypt で証明書を発行していて、nginx で一旦リクエスト(HTTPS)を受けて、それを Redmineにリバースプロキシ(HTTP) しています。ここがうまく言ってなかったんですね…。
一旦クライアントには、http://… へのリダイレクトが返され、http://… にアクセスすると、https://… へリダイレクトされると…。
iPhoneのHTTPモジュールはそういう多段階のリダイレクトを処理できたけど、AndroidのHTTPモジュールは、2段階目のリダイレクトを勝手には処理してくれなかった、というところですかね。
となれば、解決はよく知られた方法…proxy_pass と一緒に
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
と書いてあげれば、めでたく解決しました。
Redmine自体のプロトコルの設定はちゃんとHTTPSになっていたのですが、REST機能を使う際は、その設定は効かないみたいですね。
コメント