Назад | Перейти на главную страницу

Nginx SSL на локальном хосте

Я пытаюсь настроить 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 сейчас или в ближайшем будущем. Итак, вы должны подготовиться к этому сегодня.