Установка Nginx как Reverse-proxy для Remnwave

Предупреждение:

Для продолжения требуется зарегистрированное доменное имя.

Настройка домена для вашего сервера

Проверьте IP-адрес вашего сервера. Рекомендуется использовать статический IPv4-адрес.

Теперь необходимо направить доменное имя на этот IP-адрес.
Пример: my-super-panel.com193.122.122.122.

Есть два способа это сделать:

  1. Использовать DNS-провайдера (например, Cloudflare, Google Cloud и т.д.).
  2. Использовать регистратора домена (например, Namecheap и т.д.).

DNS-провайдер

Если вы используете Cloudflare, добавьте запись A/AAAA (для IPv4 и IPv6 соответственно) в DNS-записи.

Войдите в ваш аккаунт Cloudflare здесь и выберите нужный домен.

В меню слева выберите DNS, затем Records. Нажмите Create record.
Установите Type в A, а Name в @.

Информация:

Для использования поддоменов укажите имя поддомена (например, panel) в поле Name.

Введите IP-адрес сервера в поле IPv4 address и нажмите Save.

Дождитесь обновления DNS-записей.

Информация:

В панели Cloudflare жёлтое облако означает, что домен проксируется через Cloudflare, а серое — что проксирование отключено. Если Cloudflare работает стабильно в вашем регионе, рекомендуется включить проксирование (жёлтое облако).


У других DNS-провайдеров интерфейс может отличаться, но процесс аналогичен.

Обзор

В этом руководстве мы будем использовать Nginx как обратный прокси для доступа к панели Remnawave. Мы настроим доменное имя для сервера, выпустим SSL-сертификат и настроим Nginx.

Заметка:

Убедитесь, что ваш домен направлен на IP-адрес сервера.

Выпуск SSL-сертификата

Для выпуска SSL-сертификата проще всего использовать acme.sh.

Предупреждение:

Это руководство охватывает только выпуск SSL-сертификата для домена панели.

Установка зависимостей

sudo apt-get install cron socat

Установка acme.sh

Информация:

Для выпуска сертификата можно использовать любой email, но рекомендуется указать действительный.

Замените EMAIL на ваш адрес электронной почты.

curl https://get.acme.sh | sh -s email=EMAIL && source ~/.bashrc

Создание папки для сертификатов

mkdir -p /opt/remnawave/nginx && cd /opt/remnawave/nginx

Выпуск сертификата

Замените DOMAIN на доменное имя, для которого выпускается сертификат.

Предупреждение:

Не используйте доменные зоны .ru, .su, .рф. ZeroSSL их не поддерживает.

acme.sh --issue --standalone -d 'DOMAIN' --key-file /opt/remnawave/nginx/privkey.key --fullchain-file /opt/remnawave/nginx/fullchain.pem --alpn --tlsport 8443
Информация:

Убедитесь, что порт 8443 открыт на сервере. Он необходим для выпуска сертификата.

Выпуск сертификата

Сертификат успешно выпущен. Acme.sh будет автоматически продлевать сертификат каждые 60 дней, если порт 8443 открыт и не занят.

Настройка Nginx

Простая конфигурация

Создайте файл nginx.conf в директории /opt/remnawave/nginx.

cd /opt/remnawave/nginx && nano nginx.conf

Вставьте следующую конфигурацию:

Предупреждение:

Замените REPLACE_WITH_YOUR_DOMAIN на ваше доменное имя.

upstream remnawave {
    server remnawave:3000;
}

# Connection header for WebSocket reverse proxy
map $http_upgrade $connection_upgrade {
    default upgrade;
    "" close;
}

server {
    server_name REPLACE_WITH_YOUR_DOMAIN;

    listen 443 ssl reuseport;
    listen [::]:443 ssl reuseport;
    http2 on;

    location / {
        proxy_http_version 1.1;
        proxy_pass http://remnawave;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        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;
    }

    # SSL Configuration (Mozilla Intermediate Guidelines)
    ssl_protocols          TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets    off;
    ssl_certificate "/etc/nginx/ssl/fullchain.pem";
    ssl_certificate_key "/etc/nginx/ssl/privkey.key";
    ssl_trusted_certificate "/etc/nginx/ssl/fullchain.pem";

    ssl_stapling           on;
    ssl_stapling_verify    on;
    resolver               1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
    resolver_timeout       2s;

    # Gzip Compression
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types
    application/atom+xml
    application/geo+json
    application/javascript
    application/x-javascript
    application/json
    application/ld+json
    application/manifest+json
    application/rdf+xml
    application/rss+xml
    application/xhtml+xml
    application/xml
    font/eot
    font/otf
    font/ttf
    image/svg+xml
    text/css
    text/javascript
    text/plain
    text/xml;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;

    ssl_reject_handshake on;
}

Создайте файл docker-compose.yml

Создайте файл docker-compose.yml в директории /opt/remnawave/nginx

cd /opt/remnawave/nginx && nano docker-compose.yml

Вставьте его содержимое:

services:
    remnawave-nginx:
        image: nginx:1.26
        container_name: remnawave-nginx
        hostname: remnawave-nginx
        volumes:
            - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
            - ./fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
            - ./privkey.key:/etc/nginx/ssl/privkey.key:ro
        restart: always
        ports:
            - '0.0.0.0:443:443'
        networks:
            - remnawave-network

networks:
    remnawave-network:
        name: remnawave-network
        driver: bridge
        external: true

Запустите контейнер

docker compose up -d && docker compose logs -f -t

Откройте панель в браузере