I have a requirement to run a Java based web server on port 80. The options are:
- Web proxy (apache, nginx, haproxy etc.)
- xinet
- iptables
- setuid
The baseline would be running the app using setuid but I'd prefer not to for security reasons. Apache is too slow and nginx doesn't support keep-alives so new connections are made for every proxied request.
xinet is easy to set up but creates a new process for every request which I've seen cause problems in a high performance environment.
The last option is port forwarding with iptables but I have no experience of how fast it is.
Of course, the ideal solution would be to do this on a dedicated hardware firewall / load balancer but that's not an option at present.
At the moment, the setup is all on the same box which is why iptables should work.
Load is as follows approximately 2500 very short lived http requests per second that need to have a maximum latency of 50ms with... say at least 25 milliseconds for the app to return a response.