Ok, since they have dedicated IPs, you probably have something in Apache’s config files like: <VirtualHost 10.0.0.5 *:443>
So, any request that comes in to that IP will be served by that site’s WordPress installation. Normal browsers fill in the “Host:” in the HTTP headers, and they’ll only ask for a domain that makes sense, but bots can ask for any hostname, and Apache will just send it on for the site to handle if the host was defined by IP. Hosts can also be defined by name, but it might not be what you want to do in all cases. More details from Apache are available here:
https://httpd.apache.org/docs/2.4/vhosts/name-based.html
You could change Apache’s config if you want, but as long as these cached items aren’t filling up all of your disk space or causing any other issue, it might not be worth the time.
You might be able to find the visits that used incorrect hostnames in the Live Traffic page on the Wordfence menu — if they’re all coming from one IP (or just a few), blocking those IPs within Wordfence may help.
The sites with shared IPs would have VirtualHost directives with the site’s domain name instead, so only requests for those domains will be served by those sites’ WordPress installations. Attempts with a bad hostname would go to the default site for that IP (if any).
mod_userdir probably isn’t an issue in this case since you mentioned it is only on the sites with dedicated IPs, but it might be possible for attempts to reach sites with shared IPs this way. If the shared IP is 10.0.0.10, this module allows visits to 10.0.0.10/~username/ for any linux username on the site, without using their domain name in the request, so a faked “Host:” header might produce the same result.
-Matt R