A reverse proxy is a server that stands between the internet and your own servers. Every request a visitor sends arrives at the proxy first. The proxy picks one of your servers, forwards the request to it, waits for the answer, and passes that answer back. The visitor never connects to your servers directly and usually cannot even reach them.
A few words first. A server here is just a program that answers requests over the network. A backend (or origin) is one of your own servers behind the proxy, the one that actually builds the page or runs the API. A request is one message, such as "give me /login". A header is a labelled line of extra information that travels with it, like Host: example.com.
Why put something in the middle at all? Because once every request passes through one place, you can do the shared jobs there, not in every server. The proxy can hold the HTTPS certificate and spread traffic across several copies of your app. It can keep a copy of pages that rarely change, block abusive clients, and hide how many servers you run. It also means you can add, remove or restart backends while visitors keep using the same single address.