NginX: в соединениях HTTPS отказано - PullRequest
0 голосов
/ 27 июня 2018

Я создал сертификат SSL с помощью Let's Encrypt и сейчас пытаюсь настроить его с помощью NginX. NginX потребляет мой конфиг, перезапускает и хорошо обрабатывает HTTP, но отказывается от HTTPS-соединения.

Кроме того, на моем сервере нет брандмауэра. Я проверил порт 443 с netstat -peanut | grep ":443 " и NMap, с ним проблем нет.

У меня есть следующие файлы SSL:

  1. ca bundle.crt, 27 строк, начинается с -----BEGIN CERTIFICATE-----

  2. ca.crt, 35 строк, начинается с -----BEGIN CERTIFICATE-----

  3. private_rsa.key, 27 строк, начинается с -----BEGIN RSA PRIVATE KEY-----

  4. private.key, 28 строк, начинается с -----BEGIN PRIVATE KEY-----

Я не знаю, какие из них важны, поэтому я попробовал все комбинации, но ничего не работает Вот мой конфиг NginX:

server {
    listen 80;
    listen 443 ssl;
    server_name  domain.ru www.domain.ru;

    ssl_certificate /var/www/SSL/ca.crt;
    ssl_certificate_key /var/www/SSL/private.key;


    access_log  /var/www/Ret/Returner/logs/nginx.access.log;
    error_log  /var/www/Ret/Returner/logs/nginx.error.log;

    proxy_read_timeout 950s;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/Ret/Returner/;
    }
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}

Как решить проблему?

Моя ОС - Ubuntu 16.04. Версия NginX: 1.10.3 построена с OpenSSL 1.0.2g, включена поддержка TLS SNI.

Update.

Для генерации сертификатов я использовал 2 разных подхода:

  1. Использование www.sslforfree.com с одобрением владения DNS.

  2. Использование следующих команд OpenSSL:

openssl genrsa 4096 > /var/www/Ret/account.key

openssl rsa -in /var/www/Ret/account.key -pubout

К сожалению, оба набора файлов сертификатов не работают.

1 Ответ

0 голосов
/ 27 июня 2018

Мне лично не нравится, когда 80 и 443 находятся в одном разделе server. Я также не уверен, что это проблема. Но не могли бы вы попробовать что-нибудь подобное?

# Redirect all http to https
server {
    listen 80 default_server;
    rewrite ^ https://$host$request_uri? permanent;
}

# Handle https
server {
    server_name domain.ru www.domain.ru;
    listen 443 ssl http2;

    # Certificates
    ssl_certificate /var/www/SSL/ca.crt;
    ssl_certificate_key /var/www/SSL/private.key;

    # Logs
    access_log  /var/www/Ret/Returner/logs/nginx.access.log;
    error_log  /var/www/Ret/Returner/logs/nginx.error.log;

    proxy_read_timeout 950s;

    # Static Content
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/Ret/Returner/;
    }

    # Reverse Proxy
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}
...