Конфигурация Nginx для SSL

Когда я пытаюсь открыть свой сайт с помощью ssl, я получаю сообщение об ошибке ERR_CONNECTION_RESET.

В логах нет информации.

Порт 443 открыт в брандмауэре. По http все работает нормально.

CentOS7 (Linux domain.com 3.10.0-123.9.3.el7.x86_64 #1 SMP, четверг, 6 ноября, 15:06:03 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)

Версия nginx: nginx/1.6.2

OpenSSL 1.0.1e-fips 11 февраля 2013 г.

Вот мой файл конфигурации nginx:

server {
  listen 80;
  listen 443 ssl;

  server_name domain.com www.domain.com;

  #SSL config
  ssl on;
  ssl_certificate /etc/nginx/ssl/domain.crt;
  ssl_certificate_key /etc/nginx/ssl/domain.key;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
  ssl_prefer_server_ciphers on;
  ssl_stapling on;
  resolver 8.8.8.8;
  ssl_stapling_verify on;

  root /home/main/www;
  access_log /var/log/nginx/domain.com-access.log main buffer=16k;
  error_log  /var/log/nginx/domain.com-dev-error.log warn;

  location = /favicon.ico {
        log_not_found off;
        access_log off;
  }

  location = /robots.txt  { access_log off; log_not_found off; }
  location ~ /\.          { access_log off; log_not_found off; deny all; }
  location ~ ~$           { access_log off; log_not_found off; deny all; }

  location ~* .(js|css|png|jpg|jpeg|gif|ico|xml|swf|flv|eot|ttf|woff|pdf|xls|htc|html|unity3d)$ {
  add_header Pragma "public";
  add_header Cache-Control "public, must-revalidate, proxy-revalidate";
     access_log off;
        log_not_found off;
      expires   360d;
  }

  location ~ /.ht {
        deny all;
        access_log off;
         log_not_found off;
 }

  location ~* \.php$ {
        #rewrite ^/(.*)/$ /$1 permanent;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_index  index.php;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        include        /etc/nginx/fastcgi_params;
  }

  location / {
    index index.php;
    try_files $uri /index.php?$args;
  }
}

Результаты телнета:

[user@localhost ~]$ telnet domain.com 80
Trying 123.45.67.89...
Connected to domain.com.
Escape character is '^]'.
^]
HTTP/1.1 400 Bad Request
Server: nginx/1.6.2
Date: Thu, 18 Dec 2014 13:13:20 GMT
Content-Type: text/html
Content-Length: 172
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.6.2</center>
</body>
</html>
Connection closed by foreign host.
[user@localhost ~]$ telnet domain.com 443
Trying 123.45.67.89...
Connected to domain.com.
Escape character is '^]'.
Connection closed by foreign host.

Проблема была решена. Я нахожу в файле глобальной конфигурации строку:

server { listen 443 ssl; server_name _; access_log off; error_log off; return 444; }

После его удаления все работает нормально.


person Hulii Borys    schedule 18.12.2014    source источник
comment
пожалуйста, покажите вывод netstat -tulpen|grep 443, чтобы убедиться, что nginx действительно прослушивает порт 443. Алос, есть ли ошибки в error_log?   -  person r_3    schedule 18.12.2014
comment
TCP 0 0 0.0.0.0:443 0.0.0.0:* ПРОСЛУШИВАТЬ 0 17055261 29781/nginx: мастер   -  person Hulii Borys    schedule 19.12.2014


Ответы (3)


Проблема была решена. Я нахожу в файле глобальной конфигурации строку:

server { listen 443 ssl; server_name _; access_log off; error_log off; return 444; }

После его удаления все работает нормально.

— Гулий Борис

person Community    schedule 22.02.2017

слушать 433 ssl правильно в этой настройке. Это позволяет обычным определениям и определениям ssl находиться в одном блоке, но указывает nginx включать ssl только для запросов порта 443.

Возможно, проблема связана с вашим файлом сертификата. Проверьте этот вопрос по той же проблеме Конфигурация SSL в nginx 1.6

person Brian Bowles    schedule 19.12.2014

«Слушай 443 ssl» выглядит излишним. вы должны поставить «Слушать 443» (и оставить «ssl включенным» позже в конфигурации)

person Roliverio    schedule 18.12.2014
comment
Это больше не так: до версии 0.7.14 SSL не мог включено выборочно для отдельных сокетов прослушивания, как показано выше. SSL можно было включить только для всего сервера с помощью директивы ssl, что делало невозможным настройку одного HTTP/HTTPS-сервера. Для решения этой проблемы был добавлен параметр ssl директивы listen. Таким образом, использование директивы ssl в современных версиях не рекомендуется. - person Kellen; 21.01.2018