Proxy Errors with unicorn and apache2 reverse proxy

on under developer
1 minute read

Out Of Date Warning

This article was published on 22/05/2012, this means the content may be out of date or no longer relevant.
You should verify that the technical information in this article is still up to date before relying upon it for your own purposes.

I usually used thin as app-server for Rails in combination with Apache2 as webserver. I tried using unicorn instead, because I read a lot of interesting articles about it. Unfortunatly, now I got a lot of error messages like that when uploading files:

[Tue May 22 22:56:31 2012] [error] [client 146.52.xx.xx] proxy: Error reading from remote server returned by /photos/upload, referer: http://pics.stefanwienert.de/
[Tue May 22 22:58:49 2012] [error] (103)Software caused connection abort: proxy: pass request body failed to 127.0.0.1:9001 (127.0.0.1)
[Tue May 22 22:58:49 2012] [error] proxy: pass request body failed to 127.0.0.1:9001 (127.0.0.1) from 146.52.xx.xx ()
[Tue May 22 22:59:01 2012] [error] proxy: client 146.52.xx.xx given Content-Length did not match number of body bytes read

Switching back to thin and the following config works fine:

---
chdir: /apps/pics/prod/current
log: log/thin.log
port: 9001
environment: production
pid: tmp/pids/thin.pid
servers: 4
onebyone: true
wait: 60
timeout: 600
max_persistent_conns: 512

Important is the timeout of 10minutes here, to complete large uploads of pictures. For reference, this is my apache vhost conf:

DocumentRoot /apps/pics/prod/current/public


BalancerMember http://127.0.0.1:9001
BalancerMember http://127.0.0.1:9002
BalancerMember http://127.0.0.1:9003
BalancerMember http://127.0.0.1:9004

ProxyRequests Off
ProxyBadHeader Ignore

ProxyPass / balancer://unicornservers/
ProxyPassReverse / balancer://unicornservers/
ProxyPreserveHost on
ProxyPass /photos/large !
ProxyPass /photos/original !

ProxyPass /photos/thumb !

Order deny,allow
Allow from all


AllowEncodedSlashes on

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1

I found the last environment settings in some post about apache proxy problems.

Maybe someone with the same problem can take this as a starting point to fix this kind of problem with unicorn. I switch back to thin, which is fine.