Доброго времени суток.
Я хочу сделать на одном физическом сервере несколько сайтов. Использую Nginx. При этом я не хочу, чтобы по IP-адресу сайта или по не настроенному в Nginx домену открывался какой-либо из сайтов.
Для HTTP я сделал подобный конфиг:
server {
listen 80 default_server;
location / {
deny all;
}
}
server {
listen 80;
server_name example.com;
location / {
# тут настройки
}
}
И всё работает отлично. Если я открываю сайт example.com - открывается нужная страница в соответствии с тем как описано в location. Если я пытаюсь открыть по IP или через другое доменное имя, которое также на этот же IP адрес ссылается, то получаю 403 ошибку.
И теперь я хочу сделать тоже самое с HTTPS.
Если я изменяю настройки default_server таким образом:
server {
listen 80 default_server;
listen 443 ssl default_server;
location / {
deny all;
}
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
location / {
# тут настройки
}
}
То при обращении к сайту
https://example.com получаю ошибку в логе Nginx
[error] 5#5: *8 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking
А если из default server убираю строчку listen 443 ssl default_server, то при обращении с другого домена или по ip:
https://1.2.3.4 открывается сайт
https://example.com с неверным сертификатом.
Как правильно заблокировать httpS запросы на ip адрес в nginx?