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

У меня есть сервер 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 и хочу убедиться это лучший способ.

0
задан 22 September 2016 в 19:25
2 ответа

Используйте эту конфигурацию сайта. В основном она не позволяет 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
}
1
ответ дан 4 December 2019 в 16:29

Несмотря на то, что можно делать все, что угодно, используя кучу регексовых совпадений для запрашиваемого 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

0
ответ дан 4 December 2019 в 16:29

Теги

Похожие вопросы