Недавно я создал сервер nginx на debian 8. Он придумал конфигурацию по умолчанию в / etc / nginx / sites-available / default, которая перенаправляет на страницу приветствия nginx.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name your_server_ip;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Я добавил новую рабочую страницу, скажем, example.com с ssl.
В конфигурации для ../example.com он не установлен в качестве сервера по умолчанию.
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
# SSL configuration
listen 443 ssl;
listen [::]:443 ssl;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
....
Теперь, когда я проверил безопасность ssl на https://www.ssllabs.com/ssltest/analyze.html?d=example.com, он получил пятёрку. Но он прокомментировал «Несогласованная конфигурация сервера».
И когда я загружаю IP-адрес, скажем x.x.x.x в браузере как https: // x.x.x.x, он загружает ту же страницу, что и https://example.com но без ssl (зеленая адресная строка). Если я загружаю http: // x.x.x.x, он загружает страницу приветствия nginx по умолчанию.
Я попытался установить конфигурацию по умолчанию (для ip), чтобы получить запрещенное сообщение, я добавил следующий код
location / {
deny all;
}
Теперь, когда я проверяю безопасность ssl на example.com, он говорит: «Никакие безопасные протоколы не поддерживаются», и никаких результатов тестирования не появилось.
Итак, мои вопросы:
Что нужно сделать с конфигурацией по умолчанию, которая поставляется с nginx, который загружается для IP-адреса?
какое имя_сервера (файл конфигурации) следует установить в качестве сервера по умолчанию в команде "прослушивание"?
что делать с ip, который в настоящее время пересылает https-запросы на домен примера?
Ожидаемые результаты: -
Для подключения к серверу следует использовать только https: // example.com, а при загрузке IP-адреса может отображаться «страница не найдена» или «запрещена», поскольку example.com будет использоваться для скриптов php на нем.
Тесты SSL должны давать как минимум оценку A после установленной конфигурации.
IP-адрес не должен принимать какие-либо соединения напрямую и обрабатывать его.
Вы можете использовать это в качестве блока сервера по умолчанию:
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
... SSL keys for default server ...
return 403;
}
Это приведет к тому, что любое HTTP-соединение, заголовок которого Host: не соответствует никакому другому виртуальному хосту на сервере, будет возвращать клиенту сообщение об ошибке 403 Forbidden.
Если вы используете здесь действительные ключи SSL для имени хоста, которое не соответствует никакому существующему имени хоста, клиент сразу получит страницу с ошибкой 403. Если вы используете здесь самозаверяющий сертификат, то пользователь получит сообщение об ошибке ненадежного сертификата.
Наконец-то нашел подходящее решение. Quora делает что-то подобное. Чтобы перенаправить значение по умолчанию на 404.
Источник : Правильная настройка сервера nginx по умолчанию для https
Установив конфигурацию по умолчанию на this.
server {
server_name _;
listen 80 default_server;
return 404;
}
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
return 404;
}
Затем создайте каталог для ssl, если он не существует
sudo mkdir -p /etc/nginx/ssl
Затем создайте самоподписанный ssl для того же
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
Проверьте наличие ошибок и перезагрузите nginx, чтобы получить 404
nginx -t
sudo sytemctl reload nginx