Настройка обратного прокси-сервера с подключением SSL-сертификата на примере Nginx
Установка Nginx на хост-машину
1. Установка Nginx
sudo apt update && sudo apt install nginx -y
2. Настройка обратного прокси-сервера
Создайте файл конфигурации (например, /etc/nginx/sites-available/example_gitflic
) и добавьте или измените секцию server:
server {
listen 80;
server_name example_gitflic.ru;
location / {
proxy_pass http://127.0.0.1:8080; # Проксируем на внутренний сервер
proxy_send_timeout 3600s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Ssl "ON";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect off;
proxy_buffering off;
proxy_http_version 1.1;
}
}
3. Получение SSL-сертификата
Получение сертификата с помощью утилиты Let's Encrypt (Certbot)
Для получения SSL-сертификата можно использовать Let's Encrypt через утилиту Certbot:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example_gitflic.ru
Подключение самоподписного сертификата
Скопируйте сертификат на сервер, например, в /etc/ssl/certs/
для сертификата и /etc/ssl/private/
для ключа. После этого необходимо добавить строчки в конфигурацию Nginx, описанную в пункте 2.
Добавьте в блок server
:
listen 443 ssl;
ssl_certificate /etc/ssl/certs/example_gitflic.ru.crt;
ssl_certificate_key /etc/ssl/private/example_gitflic.ru.key;
4. Перенаправление HTTP -> HTTPS
Чтобы перенаправить HTTP-трафик на HTTPS, при подключении самоподписного сертификата, добавьте следующий блок в конфигурацию Nginx, описанную в пункте 2.:
server {
if ($host = example_gitflic.ru) {
return 301 https://$host$request_uri;
}
listen 80;
server_name example_gitflic.ru;
return 404;
}
5. Активация конфигурации
sudo ln -s /etc/nginx/sites-available/example_gitflic /etc/nginx/sites-enabled/
sudo nginx -t
sudo nginx -s reload
6. Доступ
Приложение будет доступно по адресу: https://example_gitflic.ru
Использование Nginx в Docker
Используйте данную инструкцию, если GitFlic развернут в Docker.
1. Добавление сервиса
Добавьте сервис Nginx в docker-compose.yml
nginx:
container_name: nginx
image: nginx:latest
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/cert:/etc/nginx/cert:ro
ports:
- "443:443"
depends_on:
- gitflic
networks:
- git_net
2. Создание директории для сертификатов и конфигурации
Создайте рядом с файлом docker-compose.yml
директорию nginx
для сертификатов и конфигурации
3. Конфигурация
В корне директории nginx
создайте файл конфигурации nginx.conf
Пример конфигурации:
http {
server {
listen 443 ssl;
server_name example_gitflic.ru;
ssl_certificate /etc/nginx/cert/example_gitflic.ru.crt;
ssl_certificate_key /etc/nginx/cert/example_gitflic.ru.key;
location / {
proxy_pass http://gitflic:8080;
proxy_send_timeout 3600s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Ssl "ON";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect off;
proxy_buffering off;
proxy_http_version 1.1;
}
}
server {
if ($host = example_gitflic.ru) {
return 301 https://$host$request_uri;
}
listen 80;
server_name example_gitflic.ru;
return 404;
}
}
Обратите внимание
Убедитесь, что имя хоста gitflic
(используемое в proxy_pass
) совпадает с названием контейнера или сервиса в docker-compose.yml
, и что оба контейнера находятся в одной сети (git_net
).
4. Размещение сертификатов
Поместите ваши сертификаты в директорию ./nginx/cert/
5. Запуск
docker-compose up -d
6. Проверка
После запуска контейнеров откройте https://example_gitflic.ru
в браузере и убедитесь, что приложение доступно.
Настройка клиента Docker для доверия сертификату
По умолчанию клиенты Docker не доверяют самоподписанным сертификатам. Необходимо добавить ваши сертификаты в хранилище доверенных сертификатов Docker.
1. Создание каталога сертификатов
Создайте каталог для хранения доверенных сертификатов Docker
mkdir -p /etc/docker/certs.d/example_gitflic.ru
2. Копирование сертификата
Скопируйте ваш самоподписанный сертификат в созданный каталог
cp example_gitflic.ru.crt /etc/docker/certs.d/example_gitflic.ru/ca.crt
3. Перезапуск Docker
Перезапустите службу Docker, чтобы применить изменения
systemctl restart docker
4. Запуск
Поскольку перезапуск Docker остановит контейнеры, запустите их снова
docker-compose up -d