Доступ к сайту на NGINX только по доменному имени

Доброго времени суток, уважаемые читатели. Сегодня тема статьи: "Доступ к сайту на NGINX только по доменному имени". Не для кого не секрет, что по умолчанию любой сайт в интернете, доступен по своему доменному имени, или по ip-адресу.
Возможные проблемы при открытом доступе к сайту по ip-адресу
Обычные пользователи для доступа к сайту используют доменное имя, а ip-адреса сайтов, зачастую используется злоумышленниками, при сканировании сетей на предмет открытых портов, и уязвимостей. Поэтому полезно настраивать доступ к сайту, только по доменному имени.
- Из личного опыта могу привести пример того, как ip-адрес моего сайта был указан на постороннем DNS-сервере.
- С какой целью и кем, мне не известно. Но в итоге, при вводе адреса постороннего сайта, браузер открывал главную страницу моего сайта, а в адресной строке было постороннее доменное имя. А при вводе адреса постороннего сайта с приставкой https, появлялось сообщение с предупреждением.

- При просмотре сертификата выяснялось, что это сертификат моего сайта.

- Если проигнорировать сообщение и перейти на сайт, то также открывалась главная страница моего сайта, и в адресной строке указывалось постороннее доменное имя.
Это не была копия моего сайта, так как все ссылки в итоге вели на мой сайт, просто сайт стал доступен по постороннему доменному имени.
- Какие в такой ситуации могут возникнуть проблемы, спросите Вы…
- Давайте рассуждать логично. Если подобное сделано не по причине ошибки, то возможно есть злой умысел.
- Например у постороннего доменного имени, может быть плохая репутация, и так как Ваш сайт будет каким-то образом позиционироваться с этим доменным именем, плохая репутация может отразиться и на Вашем сайте. А представьте ситуацию, что будет несколько подобных доменных имён с плохой репутацией, и все будут позиционироваться с Вашим сайтом…
- И ещё момент... Как на подобную ситуацию отреагируют поисковики? Получаются какие-то непонятные редиректы…
- Делайте выводы сами!
Запрет доступа к сайту по ip-адресу
- Как можно запретить доступ к сайту по ip-адресу? Есть несколько способов, в частности создание сайта-заглушки…
- Но я расскажу, о наипростейшем способе. Вам достаточно добавить несколько строчек в конфигурационный файл /etc/nginx/nginx.conf, либо в файл конфигурации самого сайта.
- Если Вы будете добавлять код в файл /etc/nginx/nginx.conf, то нужно произвести добавление кода в секцию http, до строчки подключения файлов конфигураций сайтов.
- В случае, если Вы будете добавлять код непосредственно в файл конфигурации сайта, то необходимо произвести добавление кода, выше всех других секций конфигурации.
Код должен быть добавлен таким образом, чтобы считывался сервером самым первым, из секций server { … }.
- Принцип конфигурации заключается в том, что мы создаём настройку сервера по умолчанию, из которой будет следовать, что получая запросы не подходящие под имеющиеся настройки сайтов (в частности доменные имена), он будет реагировать соответствующим образом.
- В моем примере NGINX будет сбрасывать соединения (ответ 444), Вы можете использовать другой ответ сервера, на своё усмотрение. Например 403, или 404…
Запрет доступа по 80 порту
- Если на сайте Вы не используете SSL сертификатов, и Ваш сайт доступен только по 80 порту, то достаточно добавить одну секцию.
server {
listen 80 default_server;
server_name _;
return 444;
}
- Не забудьте проверить конфигурацию, и перезапустить NGINX.
# nginx -t
# nginx -s reload
- Если всё сделано правильно, то при попытке доступа к Вашему сайту по ip-адресу, в моём примере, ответ будет таким.

Запрет доступа по 443 порту
- Если Вы используете SSL сертификаты, и Ваш сайт доступен также по 443 порту, то нужно добавить секцию представленную выше, и вторую секцию специально для 443 порта.
Обратите внимание, я не стал указывать всех настроек SSL, на разных сайтах они могут отличаться. Вам нужно найти в своей конфигурации всё что связанно с SSL, то есть все строчки начинающиеся с ssl_ и вставить их после server_name _;
server { listen 443 ssl http2 default_server; server_name _; ssl_certificate ************************ ssl_certificate_key ******************** ssl ******************** ssl ******************** ssl ******************** add_header Strict-Transport-Security 'max-age=31536000'; return 444; }
- Коме того, обратите внимание на строчку:
add_header Strict-Transport-Security 'max-age=31536000';
- У Вас может быть по другому, сделайте так, как настроено у Вас.
- В итоге, нужно обязательно проверить конфигурацию.
# nginx -t
Если есть ошибки, нужно их найти и исправить, а если всё в порядке, то можно перезапустить сервер.
# nginx -s reload
- Если всё сделано правильно, то при попытке доступа к Вашему сайту по ip-адресу, с использованием HTTPS, откроется окно с предупреждением как на первой картинке этой статьи, но при переходе, в моём примере, соединение будет сброшено сервером.

Как видите, ничего сложного, и времени потрачено всего ничего.
Сегодня мы рассмотрели тему: "Доступ к сайту на NGINX только по доменному имени". Научились закрывать доступ к сайту по ip-адресу. Смотрите также видео по теме.
Надеюсь статья была вам полезна. До встречи в новых статьях.
✍
С уважением, Андрей Бондаренко.
Видео на тему "Доступ к сайту на NGINX только по доменному имени":

WMZ-кошелёк = Z667041230317
«Linux»
Кирилл
Спасибо вам большое, вы гений