Перейти к содержанию

Настройка обратного прокси-сервера с подключением 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