Often the best approach is to use just a bit of a few different dynamic manipulation methods in combination, as long as you are willing to commit the necessary time. For example, it can be best to do something like the following, with each step targeting a different aspect, but all of them working collectively achieve the amount of reduction in dynamic range that is needed without the listener being made aware of the manipulation or the tools being used:
1) Fix outstanding and particularly egregious individual problems. Reduce the level of specific noises, sporadic over-loud things, whistles and other unwanted stuff using direct editing and/or spectral editing / restoration tools.
2) Control excessively high peaks using a conventional single-band or multi-band compressor set to only kick in briefly when those things occur. This is "top down" in terms of dynamics, and takes the most skill to set correctly so as not to be bad sounding.
3) Reduce overall dynamic range and bring up the low-level details using parallel compression. This is "bottom up" in terms of dynamics, and is easier to do transparently.