У меня есть сервер 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) каталогу, потому что: -
Вместо этого, чтобы протестировать сайты, прежде чем вы настроите и получите домен, просто: -
В Linux файл hosts /etc/hosts
В Windows файл hosts c:\windows\system32\drivers\etc\hosts
Вот пример записи файла hosts 216.58.216.78 www.myfunkysite.com