Почему я могу зайти на сайт по его домену но не могу по ip?
Когда в браузере вводите адрес, происходит примерно следующее:

браузер переводит имя в ip адрес и подключается к нему.
Когда ввели вместо имени ip, сразу понятно, куда подключаться.
там отвечает веб-сервер. После соединения браузер по протоколу HTTP «здоровается» с сервером и говорит, что ему надо. Это, в общем-то, похоже на обычный текстовый чат. Браузер пишет первым:
GET / HTTP/1.1
Host: web.site.com
Accept-Language: ruОбратите внимание на заголовок Host — тут тот адрес (без дальнейшего пути /a/b/c/index.php), который ввели в браузере. Если ввели именно ip, он и будет там в заголовке Host.

Теперь дело за сервером, как он настроен. Часто на одном сервере, на одном ip, располагается несколько сайтов. И сервер понимает, какой сайт запросили, именно по заголовку Host.

Вполне можно настроить веб сервер, что ему делать, когда в поле Host находится ip-адрес: отдавать какую-нибудь заглушку, или основной, единственный сайт.
Читать нужно о virtualhosts

вебсервер может поддерживать несколько сайтов, и по домену может понять какой из них нужно показывать для пользователя.
По айпи открывается либо какой-нить сайт, указанный по умолчанию, либо заглушка - смотря как настрен вебсервер