ApacheのReverse Proxyで502 Proxy Errorが出力される

node.js + socket.io(websocket)を使った開発をしていて、たまに下記Errorが出力される。

GET http://dev.hoge.com/socket.io/xhr-polling/5791412864346057/1307368752522 502 (Proxy Error)

(結果だけ知りたい人はこの記事の一番下へ。)Google先生に聞いてみると、apacheのversionを上げると直るという情報がHit。

下記記事を参考にyum経由で上げようとしてみた。今の環境はCentOS 5.6 + apache 2.2.3

# vi /etc/yum.repos.d/utter.repo

[utter]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

# yum --enablerepo=utter install httpd

でも、already installedと言われた。なんか依存関係でInstallできないのかな?wingも駄目だった。

 

「どーしたもんかなー」と調べ直してみたら、下記の情報がhit。

apacheのconfに下記のようにproxy-nokeepaliveを追記してみたら、あっさり直った。

<Proxy *>
        SetEnv force-proxy-request-1.0 1 
        SetEnv proxy-nokeepalive 1
</Proxy>

もしくは

<Location /hoge>
        SetEnv force-proxy-request-1.0 1 
        SetEnv proxy-nokeepalive 1
</Location>

詳しくはApacheのmod_proxyのReferenceを参照。

 

< 2011/07/01 Modified >
さらに下記Errorが出るのでforce-proxy-requestも追記。・・・と思ったけど、force-proxy-requestを追加しても再現する。Lamppのapache経由だと発生しないんだけどなー。

events.js:45
        throw arguments[1]; // Unhandled 'error' event

Error: EBADF, Bad file descriptor

 

< 2012/10/06 Modified >
Windows 2003 ServerのIISにRedirectすると下記Errorが頻発するようになった。

Proxy Error
The proxy server received an invalid response from an upstream server

ここを参考にProxyPassにkeepalive=onを追加したら大丈夫っぽい。やっぱりダメ。IP Addressを直接叩けば大丈夫なので、apacheとiisの相性なのか。。。?

ProxyPass /hoge http://192.168.0.22/hoge timeout=600 keepalive=On

詳しくは下記Official Documentで。

 

< Related Posts >