Apache
- provides a variety of multi-processing moduels (MPMs)
- flexible architecture for choosing different connection and request handling algorithms
- flexibility comes at a cost of resource consumption
Nginx
- designed to use an asynchronous, non-blocking, event-driven connection handling algorithm
- spawns worker processes, each of which can handle thousands of connections
- such connection processing model allows Nginx to scale very fast and wide with limited resources (especially good for low power systems or heavy loads)
Static & Dynamic Content
Apache
- can process dynamic content within the web server itself, without having to rely on external components through the use of dynamically loadable modules
Nginx
- can't process dynamic content itself; instead, passes it to an external processor for execution and wait for the rendered content to be sent back
Distributed or Centralized Configuration
Apache
- allows additional configuration on a per-directory basis by interpreting directives in .htaccess files
- it is possible to allow non-privileged users to control certain aspects of their website without granting them the permissions to edit the main config file
Nginx
- does not provide any mechanism for per-directory configuration, but, because it doesn't have to search for .htacess files, it is faster in serving requests
Proxy server
Why would you want a proxy server?
- avoid state or institutional browsing restrictions
- block access to certain content
- protect identity online
Reverse proxy server
Why would you want a reverse proxy?
- load balancing
- protection from attacks : a website never needs to reveal the IP address of their origin servers when using a reverse proxy
- content caching
- SSL encryption
More can be found about proxy and reverse proxy servers here