ちょっと頼まれでkeitaircを自前のサーバーのサブドメインで運用する必要が生じた。
SBMだと80番ポート以外でアクセスできないのだが、普段hogehoge.netを80番ポートで使ってる。
irc.hogehoge.netの80番ポートだけapacheに素通りさせる方法が無いか聞いてみたら、mod_proxyを使って特定サブドメインの80番ポートへのアクセスを別ポートにトンネルさせればいいとの事だった。
なるほど。
やってみたが色々失敗した|n'ω'`|
まずvirtualhostの設定部分にて、mod_proxyを設定。
ProxyPass / http://irc.hogehoge.net/
ProxyRemote * http://irc.hogehoge.net:12345
んでkeitaiirc側も12345ポートでweb_hostをirc.hogehoge.netにして立ててみた。
apacheを再起動してみた所、正常に表示はされるのだが、keitairc側の404ページに飛ばされる。
『404: No such action (http://irc.hogehoge.net/』とか言われるが、アクションって何だよって感じ。
んでソースを眺めてみたけどよく分からんのでプリントデバック、、、
どうやら/だとindexだとか/Loginだとログインの処理だとかに振り分ける所がアクションらしい。
トップにアクセスしてるのにおかしいと思ったら「/」と「http://irc.hogehoge.net/」を一致チェックしている。
何故フルパス、、、
このURLどっから引っぱってるかというと、リクエストヘッダーからそのまま引っぱっている。
そしてリクエストヘッダーを見ると。
『GET http://irc.hogehoge.net/ HTTP/1.1』となっている。
直接アクセスした時のリクエストヘッダーは『GET / HTTP/1.1』になってると思うので、mod_proxyがおかしなリクエスト吐きやがって!!
っと思ったけど、httpリクエストヘッダーの仕様を見た感じだとこれも正しい出力らしい。
逆にkeitaircが このようなリクエストが来る場合を想定していなかった方が問題か。
そもそもどちらも『Host: irc.hogehoge.net』はあるから/でいいと思うんだけど、ここを修正する方法がmod_proxyの設定側ではよく分からなかった。
のでkeitaircを修正する事にした。
{ # chop off $cf->web_host() my $host = 'http://'.$cf->web_host().'/'; $uri =~ s|$host|/|; }
って加えただけだけど。
hostの情報はconfigの方のweb_hostに入ってるので、そこが一致したらそこを排除してから一致判定をするように変更。
これで幸福が実現した。
原因に気付かず、ずっとmod_proxy側で解決しようとしてて、ここまで来るのに数時間かかった。。。
7 万で練習相手になったんだが、最近の子のテクやべぇぞ!!
特にオ マ ○ コをギューッて締めるワザ!あれなんなんだよ!?
めちゃくちゃ気持ちよくて、中 出 ししまくったっつーの!(笑)
ていうか、ぶっちゃけHの練習する必要ないんじゃね?(^^;)