同じドメイン下に複数のパスで運用している場合の問題(Cookie)

1,272 views
Skip to first unread message

K.S

unread,
Jan 19, 2008, 8:12:17 PM1/19/08
to Redmine Users (japanese)
現在、次のような構成で同じドメイン下に複数のパスでRedmineを運用しています。


mongrelの起動コマンド:

cd .../redmine-SiteA
mongrel_rails start -e production -a 127.0.0.1 -p 3001 --prefix /
redmine/SiteA

cd .../redmine-SiteB
mongrel_rails start -e production -a 127.0.0.1 -p 3002 --prefix /
redmine/SiteB


Apacheの設定:

<VirtualHost *:80>
...
<Location /redmine/SiteA>
ProxyPass http://localhost:3001/redmine/SiteA/
</Location>
<Location /redmine/SiteB>
ProxyPass http://localhost:3002/redmine/SiteB/
</Location>
</VirtualHost>


この設定で、
http://HOST/redmine/SiteA/
http://HOST/redmine/SiteB/
でそれぞれのRedmineにアクセスできるようになっています。

なのですが、問題がいくつかあります。

**メールのURLにパス部分(/redmine/SiteA/)が反映されない。

これは、管理>設定>ホスト名を
HOST/redmine/SiteA
にすることで解決しました。
何だか騙しているようですが…。


**返ってくるCookieを見ると、Path が / となっている。

セッション用の _session_id と自動ログイン用の autologin
この2つのcookieのPathがどちらも / となっています。

このため、例えば
http://HOST/redmine/SiteA/
でRedmineを使っていて、同じブラウザで途中で
http://HOST/redmine/SiteB/
に切り換えて使うと一旦ログイン画面に戻されてしまいます。


とりあえずの対処方法として、現在は次のように修正を加え
autologinだけはPathをセットするようにしています。
サイトを切り替えすると一旦セッションが無効になり、autologinで復活するという感じです。

Index: app/models/setting.rb
===================================================================
--- app/models/setting.rb (revision 5)
+++ app/models/setting.rb (working copy)
@@ -91,0 +92,4 @@
+
+ def self.site_path
+ "/#{host_name.split("/", 2)[1]}"
+ end
Index: app/controllers/account_controller.rb
===================================================================
--- app/controllers/account_controller.rb (revision 5)
+++ app/controllers/account_controller.rb (working copy)
@@ -52 +52 @@
- cookies[:autologin] = { :value => token.value, :expires =>
1.year.from_now }
+ cookies[:autologin] = { :value => token.value, :expires =>
1.year.from_now, :path => Setting.site_path }


できれば根本的に、同じドメイン下に複数のパスで
スムースに運用できるようであればよいのですが、
これに関して何か良いアイデアはありませんでしょうか?

株本 毅

unread,
Jan 24, 2008, 6:08:30 AM1/24/08
to Redmine Users (japanese)
同じくメールのURLで悩んでおりました。

結局僕も
管理>設定>ホスト名
を変更することで対処することにしました。

CookieについてはProxyPassReverseCookiePathディレクティブで
制御できますね。

<VirtualHost *:80>
...
<Location /redmine/SiteA>
ProxyPass http://localhost:3001/redmine/SiteA/
  ProxyPassReverseCookiePath / /redmine/SiteA
</Location>
<Location /redmine/SiteB>
ProxyPass http://localhost:3002/redmine/SiteB/
ProxyPassReverseCookiePath / /redmine/SiteB
</Location>
</VirtualHost>

こんな感じでいいんじゃないかと思います。僕の場合は結局
別のVirtualHostに分けてしまいましたが(これだとPathが/
でも大丈夫です)。

K.S

unread,
Jan 24, 2008, 7:02:48 PM1/24/08
to Redmine Users (japanese)
株本さんへ

> CookieについてはProxyPassReverseCookiePathディレクティブで
> 制御できますね。

ありがとうございます!
そこで書き換えるアプローチは考えつきませんでした。
このディレクティブは Apache 2.2 以降のようですね。

> こんな感じでいいんじゃないかと思います。僕の場合は結局
> 別のVirtualHostに分けてしまいましたが(これだとPathが/
> でも大丈夫です)。

それだとhttpsで証明書を分けないといけないと思ってたのですが
今考えてみれば、
ワイルドカード証明書を使えば良かったです。

Reply all
Reply to author
Forward
0 new messages