Cloudflare doesn't cache my website well

Your origin server is telling Cloudflare not to cache the content.

HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Wed, 27 Jun 2018 05:55:11 GMT
Content-Type: image/png
Content-Length: 2864
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Tue, 26 Jun 2018 21:12:29 GMT
ETag: W/“b30-1643df0ce48”

he second way to alter what Cloudflare will cache is through caching headers sent from the origin. Cloudflare will respect these settings, but you can also override them by specifying an Edge Cache TTL. Here are the caching headers we consider:

If the Cache-Control header is set to “private”, “no-store”, “no-cache”, or “max-age=0”, or if there is a cookie in the response, then Cloudflare will not cache the resource.
Otherwise, if the Cache-Control header is set to “public” and the “max-age” is greater than 0, or if the Expires headers are set any time in the future, we will cache the resource.
Note: As per RFC rules, “Cache-Control: max-age” trumps “Expires” headers. If we see both and they do not agree, max-age wins.