Назад | Перейти на главную страницу

Запретить доступ к веб-сайту НЕ через предполагаемое доменное имя

У меня есть сервер nginx на Debian с несколькими доменами. Все они живут в папке html. Затем записи A указывают на мой сервер, и вы можете получить доступ к файлам в /var/www/html/mywebsite.biz перейдя в https://mywebsite.biz. Я также назначаю им сертификаты TLS с помощью Let's Encrypt.

Выглядит это так:

└── html
    ├── mywebsite.biz
    ├── anotherwebsite.net
    ├── example-three.com
    └── somewebsite.ca

Однако вы можете получить доступ к этому html папку без TLS через мой IP-адрес вот так:

http://216.58.216.78/mywebsite.biz

Но у меня также есть случаи, когда я бы хотел, чтобы это произошло. например если я хочу создать тестовый сайт, прежде чем я смогу указать домен на свой сервер. Для этого я использовал noip.com, чтобы присвоить ему такое понятное имя:

http://myservername.ddns.net/somewebsite.ca (просто тестовый сайт)

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

Запретить / перенаправить:

http://myservername.ddns.net/mywebsite.biz

http://216.58.216.78/mywebsite.biz

Разрешите это:

http://myservername.ddns.net/somewebsite.ca

Я предполагаю просто перенаправить их туда, но я немного новичок в nginx и хочу убедиться, что это лучший способ.

Используйте эту конфигурацию сайта. Это в основном предотвращает ответ Nginx на запросы через IP. Директива default_server является ключевой частью.

# This just prevents Nginx picking a random default server if it doesn't know which server block to send a request to
server {
  listen      80 default_server;
  server_name _;
  return      444; # This means "go away", effectively

  access_log off; log_not_found off; # Optional
}

Хотя можно делать то, что вы хотите, используя кучу совпадений регулярных выражений для запрошенного URL-адреса, я бы избегал доступа через IP к родительскому (html) каталогу, потому что: -

  • В будущем будет слишком легко напортачить (безопасность)
  • Будет сложно устранить неполадки
  • Некоторые веб-сайты содержат абсолютные ссылки или ссылки относительно /, которые не будут правильными

Вместо этого, чтобы протестировать сайты, прежде чем вы настроите и получите домен, просто: -

  • настроить NGINX, как обычно
  • добавьте запись в файл хоста на клиентском ПК, чтобы преобразовать имя в правильный IP-адрес.

В Linux файл hosts /etc/hosts

В Windows файл hosts c:\windows\system32\drivers\etc\hosts

Вот пример записи файла hosts 216.58.216.78 www.myfunkysite.com