Most settings declared in a parent block (e.g. logging, compression, etc.) will be inherited by all child blocks unless specifically overridden.
But sometimes you'll come across slightly unintuitive behavior. For example, I discovered in
this thread that none of the FastCGI parameters defined in a parent block will be inherited by a child block if the child block contains any parameters of its own. So if you want to use different FastCGI parameters in different blocks, you need to redefine all of them every single time.
So, push as much as you can to upper-level blocks without breaking things, and make liberal use of includes to prevent repeating yourself in other cases. FastCGI is a case where you pretty much need to use includes, which is why most default configurations already do so.
This official wiki page contains a number of other useful tips on reducing redundancy and improving performance. Some of the configuration directives, however, might not be available on older versions of nginx that come with Ubuntu LTS releases.