Обновить
1
Павел Тухарь@pahatrop

Пользователь

Отправить сообщение

В случае nginx один порт может быть занят либо upstream с полным пробросом сырого tcp, либо http с терминацией TLS

Чтобы всё работало на одном порту нужно через upstream пробрасывать весь трафик с 443 порта, по sni разделять его вот так:

map $ssl_preread_server_name $upstream {
    1c.ru x.x.x.x:1234;
    default 127.0.0.1:1443; # порт для nginx http конфигов
}

server {
    listen 443;
    proxy_pass $upstream;
    ssl_preread on;
}

Но в таком случае нельзя будет узнать настоящий ip адрес инициатора запроса, решается через proxy_protocol on, но сервер который принимает запросы тоже должен уметь работать с proxy_protocol (xray умеет)

В http секции все конфиги должны запускаться на 1443 порту с прокси протоколом если нужно знать настоящий айпи:

    listen 1443 ssl proxy_protocol;

Да, пример конфига:

tcp:
  routers:
    proxy:
      rule: "HostSNI(`1c.ru`)"
      entryPoints:
        - websecure
      service: proxy
      tls:
        passthrough: true
      priority: 100

    catchall:
      rule: "HostSNI(`*`)"
      entryPoints:
        - websecure
      service: traefik-https
      tls: {}
      priority: 1

  services:
    proxy:
      loadBalancer:
        servers:
          - address: "x.x.x.x:1234" # тут указывается адрес и порт куда нужно форвардить сырой tcp
    traefik-https:
      loadBalancer:
        servers:
          - address: "127.0.0.1:443" # весь остальной трафик не трогается

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность