Я пытаюсь настроить SSL на своем локальном хосте с помощью Nginx. Я создал самозаверяющий сертификат, и моя конфигурация Nginx выглядит следующим образом:
server {
listen 443 ssl;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ =404;
}
}
Но когда я пытаюсь получить доступ, он дает мне следующую ошибку
$ curl -i https://localhost
curl: (7) Failed to connect to localhost port 443: Connection refused
Что могло быть возможной причиной этой ошибки?
Это результат выполнения команды netstat -tuplen.
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 0 71662 -
Вам не хватает listen
директива:
listen [::]:443 ssl;
Это сообщает nginx о необходимости прослушивать IPv6-соединения. Ваш существующий listen
Директива прослушивает только соединения IPv4, и это подтверждается в вашем netstat
вывод.
Причина, по которой это требуется (в дополнение к существующим listen
директива) заключается в том, что localhost
разрешается в адрес IPv6 ::1
в дополнение к историческому IPv4-адресу 127.0.0.1
. Но предпочтительным протоколом для установления соединений является IPv6. Таким образом curl
пытается подключиться к nginx через IPv6 и не работает.
Конечно, в глобальном Интернете, на котором вы (вероятно) в конечном итоге разместите свой сайт, вам также придется использовать IPv6 сейчас или в ближайшем будущем. Итак, вы должны подготовиться к этому сегодня.