Реверс-прокси и SSL-сертификат для Gitea. Мигрируем репозитории с Githib. Часть 2.

Россия
Реверс-прокси и SSL-сертификат для Gitea. Мигрируем репозитории с Githib. Часть 2.

Сегодня мы рассмотрим настройку реверс-прокси сервера Nginx для Gitea и защитим сервер с помощью SSL-сертификата.

Зачем нужен реверс-прокси

Представим, что у нас есть несколько серверов:

3_сервера.png

На каждом из них запущен свой сервис, который нам нужно сделать доступным пользователям в сети Internet.

Первый напрашивающийся и простой способ – назначить каждому из них «белый» IP-адрес, чтобы они были доступны напрямую.

На этот план стразу можно возразить:

  • Белые IP ценный ресурс - тратить 1 адрес на 1 сервер неэффективно, особенно когда серверов много.
  • Угрозы безопасности – на каждом из серверов могут быть запущены службы и сервисы, например, как минимум SSH-сервер. Доступ к таким сервисам нужно по максимуму ограничивать.

Существуют и прочие угрозы безопасности и проблемы, при таком подходе, но я не буду их рассматривать, так как они выходят за рамки обсуждаемой темы.

Чтобы решить всё выше описанные проблемы применяется реверс-прокси. В результате схема у нас меняется:

Реверс-прокси_1.png

Теперь мы можем зарегистрировать разные доменные имена для наших внутренних серверов и прозрачно предоставлять к ним доступ с помощью реверс-прокси. При этом будут доступны только выбранные сервисы с каждого сервера и нам не нужно будет указывать нестандартный порт!

И, конечно, нам понадобится всего один белый ip-адрес для всех наших серверов!

Для защиты соединения между пользователем и сервером обязательно использование SSL-сертификатов. Да, вы можете установить на каждый сервер свой сертификат, но, когда серверов станет больше, управление и обновление сертификатами может превратиться в проблему. Вы можете установить сертификат на реверс-прокси, а для соединений между сервером и реверс-прокси использовать протокол http:

Реверс-прокси_2.png

Настройка реверс-прокси

Далее я полагаю, что у вас уже установлен сервер Gitea, согласно этой статье.

Я приведу настройки моего сервера https://git.altuninvv.ru

Установим nginx

sudo apt install nginx

Создадим файл: 

mcedit /etc/nginx/sites-available/reverse_gitea.conf

С содержимым: 

server {
	listen 80;
	server_name git.altuninvv.ru;

	location / {
		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;

		rewrite                 ^/(.*) /$1 break;
		rewrite                 ^/$ /$1 break;

		proxy_pass http://127.0.0.1:3000;
		proxy_read_timeout  90;
	}
}

Создадим симлинк: 

sudo ln -s /etc/nginx/sites-available/reverse_gitea.conf /etc/nginx/sites-enabled/reverse_gitea.conf

Обязательно проверим конфигурацию nginx

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

Откроем страницу с ip адресом нашего сервера, например: 

http://192.168.0.27

Откроется сайт с Gitea.

Получаем SSL-сертификат LetsEncrypt для Gitea

Установим certbot

sudo apt install certbot

Запустим: 

Запустим:
certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: git.altuninvv.ru
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Введем 1 и нажмем Enter

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Введем 2 и нажмем Enter

Будет произведен запрос сертификата и если все прошло успешно вы увидите: 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://git.altuninvv.ru

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=git.altuninvv.ru
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Перезапустим nginx

sudo service nginx restart

Внесем изменения в конфигурацию Gitea

sudo mcedit /etc/gitea/app.ini

Изменим параметр ROOT_URL

ROOT_URL         = https://git.altuninvv.ru

Перезапустим Gitea

sudo service gitea restart

Теперь Gitea открывается при открытии адреса https://git.altuninvv.ru

Обратите внимание, вы должны отдельно донастроить Nginx, чтобы SSL-соединение обеспечивало максимальную безопасность! Об этом, возможно, выйдет отдельная статья!

Заключение

Сегодня мы рассмотрели настройку сервера nginx в качестве реверс-прокси.

Установили certbot и получили сертификат letsencrypt для нашего сервера.

В следующей статье мы рассмотрим миграцию репозиториев со сторонних сервисов в Gitea.

Прочитано 321 раз Последнее изменение Среда, 20 апреля 2022 19:00

Обсудить:

Сообщество ВКонтакте Группа в Telegram Сервер Discord Канал в ЯRUS
Топ-100