Я не думаю, что существует способ предотвратить это путем бездельничания с vhost defs. Вы всегда собираетесь иметь значение по умолчанию vhost.
Однако можно выполнить его с mod_rewrite. Что-то как
RewriteEngine on
RewriteCond %{HTTP_HOST} !^mydomain.com [NC]
RewriteRule ^/(.*) /$1 [F]
возвратится 403 (F=forbidden), когда сервер достигнут IP, если кто-то не умен (т.е. вставляет Хост: заголовок http, все еще с помощью IP; нормальные браузеры не делают так этого).
Вы могли также попытаться перенаправить на mydomain.com вместо, запретите:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^mydomain.com [NC]
RewriteRule ^/(.*) http://mydomain.com/$1 [R=301]
Первый VirtualHost является значением по умолчанию, это - то, почему это также получает Ваши запросы IP.
Я сделал бы это:
NameVirtualHost *:80
<VirtualHost 1.2.3.4:80>
ServerName ip.mydomain.com
# first VH is default!
</VirtualHost>
<VirtualHost 1.2.3.4:80>
ServerName mydomain.com
</VirtualHost>