Заставить сервер Apache принимать запросы только к домену, а не к IP

9

У меня есть сервер CentOS под управлением Apache 2.2.15. Если IP-адрес сервера равен 198.51.100.4, и я пишу в браузере http://198.51.100.4, он отправляется на мой веб-сайт.

Я хочу предотвратить это. Я хочу, чтобы мой веб-сайт был доступен только для полного доменного имени, т.е. http://example.com/ .

Как я могу настроить свой сервер, чтобы веб-сайт был недоступен при посещении IP-адреса?

antiks
источник
2
Возможный дубликат Apache, принимающий запросы к другим серверам?
Дженни Д
Хотя вопрос не совсем совпадает с дубликатом, с которым я связан, ответ на этот вопрос также является ответом на этот.
Дженни Д
Мне любопытно, почему ты это сделал. обратный DNS это вещь.
njzk2

Ответы:

7

Вы можете использовать Alias *для перехвата любой другой трафик, кроме разрешенного thoose на вашем виртуальном хосте, для этого вы должны использовать в качестве последнего* псевдонима виртуальный хост с последней позицией .

Так будет обслуживаться только определенный домен.

<VirtualHost *:80>
ServerName mywebsite.com
DocumentRoot /var/www/default
...
</VirtualHost>

<VirtualHost *:80>
ServerName another.mywebsite.com
DocumentRoot /var/www/another
...
</VirtualHost>

# /!\ THIS HAS TO BE ON THE LAST POSITION /!\
<VirtualHost *:80 *:443>
# [ Server Domain ]
ServerName localhost
ServerAlias *
# [ Cancel trafic ]
RewriteRule .* - [END,R=406]
# [ Custom Log ]
CustomLog ${APACHE_LOG_DIR}/other.log combined
</VirtualHost>

В моем примере будут разрешены только mywebsite.com & another.mywebsite.com, все остальные домены или IP-адреса будут отменены.

Чтобы отменить трафик, вы можете использовать перенаправление -и затем добавить код ошибки, например, я использовал RewriteRule для перенаправления на 406 Not Acceptable ( R=406).

Здесь вы можете найти список кодов перенаправления: https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP

Froggiz
источник
Спасибо! Я попробовал ваш метод, и он работает. Но я немного изменился. Я создал новый виртуальный хост и поставил в качестве ServerName IP-адрес сервера + RewriteRule :)
antiks
11

Вы можете добавить виртуальный хост по умолчанию, который просто выдает ошибку «отказано», или что-то еще. Когда браузер приходит на ваш веб-сервер без хоста, URL-адрес которого совпадает с каким-либо ServerNameили ServerAliasстрок в других виртуальных хостах, будет обслуживаться виртуальным хостом по умолчанию.

Итак, в вашем конфиге apache:

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/default
    ...
</VirtualHost>

<VirtualHost *:80>
    ServerName mywebsite.com
    ...
</VirtualHost>
wurtel
источник
1

Вам нужно переписать правило так:

 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^mywebsite.com$
 RewriteRule /.* https://mywebsite.com/ [R]
Кобус
источник
Это не делает то, что просил ОП.
Гонки легкости на орбите