Запуск HTTPS на нестандартном порту с NGINX возвращает ssl too long.

Вопрос или проблема

Я хочу запустить экземпляр Redmine на порту 5020 моего VPS

Это моя конфигурация nginx site-available:

server {

        listen 5020 ssl default_server;
        listen [::]:5020 ssl default_server;
        include snippets/ssl-params.conf;

        include snippets/self-signed.conf;

        root /opt/redmine/public;

        # Добавьте index.php в список, если вы используете PHP
        #index index.html index.htm index.nginx-debian.html;

        server_name my.great.server ;
        return 301 https://$server_name:5020$request_uri;

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


        passenger_enabled on;
        passenger_min_instances 1;
        client_max_body_size 10m;

}

NGINX принимает это.

Но при посещении https://my.great.server:5020 возникает ошибка:

Произошла ошибка во время соединения с my.great.server:5020. SSL получил запись, превышающую максимальную допустимую длину.

Redmine работает на этом порту без https, однако, используя эту конфигурацию [ред.: я имел в виду, что после замены конфигурации для https на следующую конфигурацию для http, она будет работать]:

server {

    # listen 5020;
    listen 5020 default_server;
    listen [::]:5020 default_server;

    root /opt/redmine/public;

    server_name my.great.server:5020 ;

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


    passenger_enabled on;
    passenger_min_instances 1;
    client_max_body_size 10m;

}

Файлы фрагментов все существуют и корректны, поскольку они работают на порту 443. Я открыл порт 5020 для tcp.

Посещение этого вопроса не помогло мне.

Этот вопрос говорит, что мне нужно добавить ssl после номера порта в строке, которая начинается с listen, т.е. 5020, но это уже добавлено.

Пожалуйста, помогите мне, спасибо.

ПС: Если решение требует, чтобы ссылка на Redmine была: https://my.great.server/some/subfolder, это для меня абсолютно приемлемо.

Я отвечаю на это на случай, если кому-то это понадобится

Redmine 5 на Ubuntu 22 ARM процессор Oracle Cloud

Сначала нужно перейти в директорию: /opt/redmine, и отредактировать Gemfile там. Прямо перед group :ldap do ... добавьте: gem 'blankslate' (обратите внимание на ”).

Затем выполните bundle install от имени root.

Во-вторых, убедитесь, что ваш целевой порт открыт в виртуальной сетевой карте на Oracle Cloud (обычно порты 21-9999 должны быть открыты для tcp. Это хорошо)

Теперь перейдите к /etc/nginx/conf.d/your-redmine-domain.tld.conf. Удалите все там. В противном случае могут возникнуть конфликты.

Теперь перейдите к nano /etc/nginx/sites-available/your-site. Оставьте только блок сервера, который слушает 443.

Теперь перейдите к nano /etc/nginx/sites-available/default . Здесь добавьте этот блок:

server {

       

        root /opt/redmine/public;

        server_name my.great.site; # управляется Certbot

       passenger_enabled on;
        passenger_min_instances 1;
        client_max_body_size 10m;


    listen [::]:5020 ssl ipv6only=on; # управляется Certbot
    listen 5020 ssl; # управляется Certbot
    ssl_certificate /etc/letsencrypt/live/my.great.site/fullchain.pem; # управляется Certbot
    ssl_certificate_key /etc/letsencrypt/live/my.great.site/privkey.pem; # управляется Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot

}

Убедитесь, что нет объявления index index.html ....

Также очень важно: убедитесь, что эта часть не включена:

location / {
    try_files $uri $uri/ =404;
}

(если вы копируете из блока 443, эта часть может быть включена. Удалите ее)

В противном случае Redmine не сможет перейти на страницу входа, и вы не сможете настроить все как администратор.

Наконец, перезапустите nginx.

Используя этот метод, теперь это работает.

Спасибо @SteffenUllrich за указание на то, что мне следует проверить дополнительные конфигурации.

Ответ или решение

Когда вы настраиваете NGINX для работы с HTTPS на нестандартном порту, как например 5020, и сталкиваетесь с ошибкой «SSL received a record that exceeded the maximum permissible length», это может быть вызвано рядом факторов. Давайте разберемся, как правильно настроить вашу конфигурацию, чтобы избежать подобных проблем.

1. Проверка конфигурации серверного блока

В вашем конфигурационном файле NGINX, который вы указали, содержится следующее:

server {
    listen 5020 ssl default_server;
    listen [::]:5020 ssl default_server;
    include snippets/ssl-params.conf;
    include snippets/self-signed.conf;

    root /opt/redmine/public;

    server_name my.great.server;
    return 301 https://$server_name:5020$request_uri;

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

    passenger_enabled on;
    passenger_min_instances 1;
    client_max_body_size 10m;
}

Важные моменты в конфигурации

  • SSL-сертификаты: Убедитесь, что пути к сертификату и ключу SSL, которые вы используете, корректны и сертификаты реально существуют. Если вы используете самоподписанный сертификат, убедитесь, что вы правильно включили snippets/self-signed.conf.

  • Указание return 301: Вы используете переадресацию на HTTPS, что может привести к бесконечному циклу, если не настроен HTTP серверный блок, который будет слушать 5020 без SSL. Рассмотрите возможность разделения конфигурации для HTTP и HTTPS.

2. Открытие порта

Проверьте, что порт 5020 открыт в вашем фаерволе и сетевых настройках вашего VPS. Убедитесь, что у вас есть правила, разрешающие входящий трафик на этот порт.

3. Попробуйте обновить конфигурацию сервера

С учетом описанных выше рекомендаций, попробуйте следующую конфигурацию:

server {
    listen 5020 ssl;
    listen [::]:5020 ssl;

    server_name my.great.server;

    ssl_certificate /etc/letsencrypt/live/my.great.server/fullchain.pem; # Укажите правильный путь к вашему сертификату
    ssl_certificate_key /etc/letsencrypt/live/my.great.server/privkey.pem; # Укажите правильный путь к вашему ключу
    include /etc/letsencrypt/options-ssl-nginx.conf; # Наличие этого файла помогает с настройками SSL
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # Наличие этого файла помогает с настройками DH-параметров

    root /opt/redmine/public;

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

    passenger_enabled on;
    passenger_min_instances 1;
    client_max_body_size 10m;

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

4. Проверка и перезапуск NGINX

После внесения изменений в конфигурацию, проверьте ее на синтаксические ошибки:

sudo nginx -t

Если ошибок нет, перезапустите NGINX:

sudo systemctl restart nginx

5. Заключение

Если после всех проверок проблема сохраняется, может быть полезно использовать инструменты для диагностики, такие как openssl s_client -connect my.great.server:5020, чтобы увидеть, какие данные принимает сервер и как он отвечает. Это поможет вам определить, принимает ли сервер запросы на SSL правильно.

Такое структурированное отношение к проблеме поможет вам установить безопасное соединение HTTPS на нестандартном порту, избегая привычных ошибок и затруднений. Не забывайте периодически обновлять сертификаты и следить за логами NGINX для выявления потенциальных проблем.

Оцените материал
Добавить комментарий

Капча загружается...