It depends which server-side cache we're talking about as this has usually many layers. If your application server is caching HTML to save on expensive SQL queries and template processing, then you still can use nonces by modifying the output HTML on the way back. Your templates and in result the generated HTML may contain placeholders like this:
<script nonce="CSP_NONCE_PLACEHOLDER">
...
</script>
This can be happily cached by the application server for days without negatively impacting the CSP nonce protection.
The nonce is then generated dynamically on the web server and replaces the above placeholder without expiring the cached value:
<script nonce="ee4183bb7784017e0ab7d38ab7ef9eb3a75190e0e76ca5daba8cd20104bd8131">
...
</script>
I have been doing it for years on webcookies.org with the web application running on Django, caching in Redis and web server being Nginx. With the latter there are two options:
sub_filter_once off;
sub_filter CSP_NONCE_PLACEHOLDER $ssl_session_id;