We propose a load balancing algorithm that adapts its strategies for allocating Web requests based on the Web servers' status. The system used in our experiment comprises of two components: (1) a Prober and (2) an Allocator. The Prober gathers the status information from the Web servers every 50 milliseconds. The status information consists of the load on each Web server and a check for a cache hit. Based on this status information, the Allocator calculates a weighted metric for each server. This metric has three components: (1) CPU load on the server, (2) server's response rate, and (3) the number of requests served by the server. The Allocator chooses the Web server with the least value for this metric. Unique features of this approach are (1) consideration of both the global information (consisting of status at other Web servers) and local information at each Web server to choose the best server to allocate a request, and (2) the algorithm passes the IP address of the chosen Web server to the client that initiated the request and then allows the client to establish a connection with the server directly, thereby eliminating the participation overhead of the intermediate redirector. We compare our algorithm with three different methods: (1) random allocation scheme, (2) round robin allocation scheme, and (3) a recently reported scheme that uses neural networks. Our method is as good as or better (in most cases) in response time, than the other three approaches.