Не работает редирект на HTTPS. OpenSSL.

Zalman_ nginx-forum на forum.nginx.org
Вт Окт 20 05:07:32 UTC 2020


Доброго времени суток!

Нужна помощь по вопросу SSL шифрования.

Объясню, что есть и что уже имеется.

Основная задача – поднять RocketChat на локальном сервере и обеспечить
шифрование при доступе к локальному серверу из вне.

Для этих целей использовал Ubuntu 18.04 LTS на виртуалке на сервере. В
качестве веб-сервера использовал Nginx - 1.14.0 (Ubuntu), а в качестве СУБД
использую MongoDB - db version v4.0.20. Использование Nginx и MongoDB
описано в мануале по установке RocketChat.
Все это удалось сделать и все хорошо работает. То есть Nginx + MongoDB +
RocketChat хорошо работают как в локальной сети, так и из вне (с помощью
проброса портов). Однако не удается подключить SSL – сертификат. Так как
сервер поднимался локально (доступ из вне и локально осуществляется через
IP-адрес сервера и порт) и отсутствует какой-то домен, то получение
SSL-сертификата от Let’S Encrypt является проблематичным, поэтому выбрал
самоподписанный SSL-сертификат на основе OpenSSL.
Приватный ключ, сертификат, а также ключ Диффи-Хеллмана сделал. Конфиги
nginx.conf, а также конфиг в папке
/etc/nginx/sites-available/rocketchat.conf настроил, однако по каким-то
причинам доступ к чату есть через HTTP, но нет через HTTPS. 

С этой темой сижу уже достаточно долго. Пробовал много способов и много
различных конфигов, но все равно не работает. 
Причем пробовал как с отключенным UFW, так и с включенным (разрешал
подключение по портам 80, 443, *нужный мне порт*). Также в iptables тоже
разрешил 3 предыдущих порта, но эффекта ноль.

А вот тут я приведу конфиги.
/etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        ##
        # Basic Settings
        ##
        #sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##
        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json
application/javascript text/xml application/xml applicatio$

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*.conf;
}

#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

/etc/nginx/sites-available/default.conf

upstream backend {
   server 127.0.0.1;
}

#HTTP
server {
        #Делаю конфиг согласно
https://techlist.top/translation-nginx-to-https/
        listen 80;
        server_name *IP локального сервера*;
        return 301 https://$server_name$request_uri;
}

#HTTPS
server {
        #Порт, который будет слушать Nginx для SSL
        listen 443 ssl http2;

        #Имя сайта
        server_name *IP локального сервера*;

        #Корневая директория и индексный файл (ничего не менял)
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        #Лог-файлы
        access_log  /var/www/html/access_https.log;
        error_log   /var/www/html/error_https.log;

        #SSL-секция

        #Сертификат и ключ
        ssl_certificate /etc/ssl/certs/rccrt.crt;
        ssl_certificate_key /etc/ssl/private/rckey.key;

        #SSL-сессия
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;

        #Diffie-Hellman ключ для DHE-шифров
        ssl_dhparam /etc/ssl/certs/dhparam.pem;

        #Используемые протоколы
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        #Наборы шифров
        ssl_ciphers '*набор шифров*';

        #Приоритет серверных шифров
        ssl_prefer_server_ciphers on;

        #Включение HSTS (Strict-Transport-Security)(15768000 seconds = 6
месяцев)
        add_header Strict-Transport-Security max-age=15768000;

        resolver 8.8.8.8 8.8.4.4 valid=300s;

       # server_name _;

       location / {
                # Параметры проксирования
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        proxy_buffer_size   128k;
        proxy_buffers   4 256k;
        proxy_busy_buffers_size   256k;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header HTTPS YES;
        # IP-адрес целевой площадки для проксирования
        proxy_pass http://192.168.1.108;
        }

        # pass the PHP scripts to FastCGI server listening on
127.0.0.1:9000
        #
        #location ~ \.php$ {
        # include snippets/fastcgi-php.conf;
        #
        #       # With php7.0-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php7.0-fpm:
        #       fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}

Далее делаю «копию» в папку sites-enabled
sudo ln -s /etc/nginx/sites-available/default.conf
/etc/nginx/sites-enabled/

Проверяю синтаксис
sudo nginx -t
(на что получаю положительный ответ)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

И последовательно делаю перезапуск Nginx
sudo service nginx restart
sudo systemctl restart nginx

В итоге, набирая IP и порт и пытаясь подключиться по HTTPS, в Google Chrome
вижу ошибку ERR_CONNECTION_CLOSED. В чем может быть проблема?

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,289759,289759#msg-289759



Подробная информация о списке рассылки nginx-ru