- A forward proxy is used when you want to access resources in the internet. Usually companies don't allow unrestricted access to the internet from their internal network. Thus the users would need to use a (forward proxy) to access the internet. What happens is that when you want to access an internet resource (i.e www.google.com) you will ask a specific server which you have configured in your client (i.e brower) for it. So instead of http://www.google.com your browser will access http://proxy.company.com/?url=www.google.com and the proxy will fetch the results and return them to you.
- A reverse proxy on the other hand is used when you have a web server but do not want to expose it to the internet (for various reasons). What happens is that you use another web server which you configure to "proxy" requests that fulfill some specific criteria to the other web server. The criteria may be requests that have a specific host or a specific port or even a particular path. A characteristic example of reverse proxy is the well-known 3-tier architecture (web server / app server / database server). The web server is used to serve all requests but it "proxies" (forwards) some of the requests to the app server. Or you can offload your SSL security to a particular web server that stores your private key and acts as a reverse proxy for your internal web servers. Or you have an app server that can't serve static files (i.e gunicorn) and you need to put an nginx in front to be used as a reverse proxy to serve these files and pass the other requests to the app server. Or you can use an akamai reverse proxy to protect your server.
Notice that while there's only one forward proxy, there could be a (large) chain of reverse proxies when accessing a server. I.e when a user accesses www.example.com the request may pass through: akamai -> nginx (ssl) -> varnish (cache) -> app server.