
Реверс-прокси и SSL-сертификат для Gitea. Мигрируем репозитории с Githib. Часть 2.
Сегодня мы рассмотрим настройку реверс-прокси сервера Nginx для Gitea и защитим сервер с помощью SSL-сертификата.
Зачем нужен реверс-прокси
Представим, что у нас есть несколько серверов:
На каждом из них запущен свой сервис, который нам нужно сделать доступным пользователям в сети Internet.
Первый напрашивающийся и простой способ – назначить каждому из них «белый» IP-адрес, чтобы они были доступны напрямую.
На этот план стразу можно возразить:
- Белые IP ценный ресурс - тратить 1 адрес на 1 сервер неэффективно, особенно когда серверов много.
- Угрозы безопасности – на каждом из серверов могут быть запущены службы и сервисы, например, как минимум SSH-сервер. Доступ к таким сервисам нужно по максимуму ограничивать.
Существуют и прочие угрозы безопасности и проблемы, при таком подходе, но я не буду их рассматривать, так как они выходят за рамки обсуждаемой темы.
Чтобы решить всё выше описанные проблемы применяется реверс-прокси. В результате схема у нас меняется:
Теперь мы можем зарегистрировать разные доменные имена для наших внутренних серверов и прозрачно предоставлять к ним доступ с помощью реверс-прокси. При этом будут доступны только выбранные сервисы с каждого сервера и нам не нужно будет указывать нестандартный порт!
И, конечно, нам понадобится всего один белый ip-адрес для всех наших серверов!
Для защиты соединения между пользователем и сервером обязательно использование SSL-сертификатов. Да, вы можете установить на каждый сервер свой сертификат, но, когда серверов станет больше, управление и обновление сертификатами может превратиться в проблему. Вы можете установить сертификат на реверс-прокси, а для соединений между сервером и реверс-прокси использовать протокол http:
Настройка реверс-прокси
Далее я полагаю, что у вас уже установлен сервер 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.
Добавить комментарий