Web servers must be protected from overload since server overload leads to low server throughput and increased response times experienced by the clients. Server overload occurs when one or more server resources are overutilized. In this paper we present an adaptive architecture that performs admission control based on the expected resource consumption of requests. By dynamically setting the maximum rate of accepted requests, we avoid overutilization of the critical resources. We also provide mechanisms for service differentiation. We present our admission control architecture and experiments that show that it can sustain low response times and high throughput for premium clients even during high load.