Вопрос или проблема
Я хочу запустить экземпляр 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 для выявления потенциальных проблем.