Proxy buffer is related to the way how nginx handles the response received from the proxied server.
When buffering is enabled, nginx receives the response from the proxied server immediately into memory buffers, and closes the connection to the proxied server after having received the response. It then sends the response to the client from its buffers.
When buffering is disabled, nginx sends the response synchronously to the client. This means that the connection to the proxied server is open as long as it takes to send the complete response to the client.
Buffering is therefore a method of temporarily storing the response for each individual client separately to allow the connection to the proxied server to close earlier.
Proxy caching is the process of nginx storing the data locally, and serving the cached copy of data to multiple clients. This means that the proxied server is not queried for every client request, but the data is served from the cache if the cached data is still considered valid (lifetime has not passed).
Proxy caching makes the load on proxied server much less, but it might cause old data to be sent to clients.