A reverse proxy is a server that takes the requests (HTTP/HTTPS) & then transfers or distributes them to the backend server. The backend server can be an application server like Tomcat, wildfly or Jenkins, etc or it can even be another web server like Apache.
But why do we even need a reverse proxy in front of the app or web server at all, we need it because,
1- It hides point of origin, thus making our backend server more secure & less susceptible to attacks,
2- Since the reverse proxy is the first point of contact for all requests, it can help encrypt/decrypt the request. This takes the load off from the backend server,
3- It can also be used for caching of content, which again reduces the load from other servers,
4- it can also act as a load-balancer.