Привет! 👋
Иногда сервер начинает напоминать старый шкаф — вроде всё работает, но внутри бардак: где-то валяются старые контейнеры, где-то временные сервисы, которые «ну потом разберу».
Вот я и решил устроить генеральную уборку на своём VPS. Там уже крутятся AFFiNE и Passbolt, и я подумал: почему бы не заодно переселить туда и TeamSpeak?
Тем более повод подходящий — вышел сервер TeamSpeak 6 (в бете!). Любопытство победило: поднял тестовый инстанс, настроил, и вроде всё работает.
Для порядка завёл поддомен ts6.ezzzzko.tech, чтобы не путаться с другими сервисами.
И вот тут вылезла одна мелкая, но раздражающая деталь.
TeamSpeak, как известно, живёт на своём UDP-порту (9987), но если кто-то откроет ts6.ezzzzko.tech в браузере, он просто увидит ошибку — никакой страницы, ничего.
А хочется ведь красиво, чтобы при открытии поддомена браузер сам перебрасывал человека на мой основной сайт — ezzzzko.tech.
Мелочь, но именно такие мелочи делают инфраструктуру аккуратной.
Вот и решил оформить красивый редирект. через nginx, с SSL, как положено.
🧩 Шаг 1. DNS-запись
Для начала — самое базовое: DNS.
Нужна обычная A-запись для поддомена, чтобы он смотрел на тот же IP, где стоит сервер:
ts6 A <IP_твоего_сервера>
TeamSpeak будет использовать свой порт (по умолчанию 9987 UDP), а nginx — 80/443.
Так что если всё на одном IP — этого достаточно.
🔒 Шаг 2. SSL-сертификат
Технически TeamSpeak не нуждается в HTTPS, но браузеру всё равно нужно что-то валидное, иначе при редиректе он начнёт ругаться.
Так что ставим сертификат для поддомена.
Самый простой способ — через Certbot:
sudo certbot certonly --nginx -d ts6.ezzzzko.tech
Если ты уже выпускаешь сертификаты для нескольких поддоменов — просто добавь его в общий список:
sudo certbot certonly --nginx -d ezzzzko.tech -d ts6.ezzzzko.tech
Теперь у нас есть HTTPS, и можно смело редиректить, не ловя желтые замочки и “небезопасные соединения”.
⚙️ Шаг 3. Редирект в nginx
Создаём новый конфиг, например:
/etc/nginx/sites-available/ts6.ezzzzko.tech
В нём — два блока: один для HTTP, другой для HTTPS.
server {
listen 80;
listen [::]:80;
server_name ts6.ezzzzko.tech;
return 301 https://ezzzzko.tech$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ts6.ezzzzko.tech;
ssl_certificate /etc/letsencrypt/live/ts6.ezzzzko.tech/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ts6.ezzzzko.tech/privkey.pem;
return 301 https://ezzzzko.tech$request_uri;
}
Активируем сайт симлинком:
ln -s /etc/nginx/sites-available/ts6.ezzzzko.tech /etc/nginx/sites-enabled/
Проверяем и перезапускаем nginx:
sudo nginx -t
sudo systemctl reload nginx
🧠 Результат
| Ситуация | Что происходит |
|---|---|
Подключение к ts6.ezzzzko.tech:9987 | Работает TeamSpeak, всё как надо |
Открытие http://ts6.ezzzzko.tech | nginx редиректит на https://ezzzzko.tech |
Открытие https://ts6.ezzzzko.tech | То же самое, только по HTTPS |
| Есть SSL | Всё красиво, без ошибок |
| Нет SSL | Браузер ругается, но редирект всё равно работает |
⚡ Минимальный набор
- ✅ DNS:
ts6 A <IP_сервера> - ✅ SSL через certbot
- ✅ Редирект в nginx
Так что теперь мой ts6.ezzzzko.tech спокойно обслуживает TeamSpeak 6, а любой, кто случайно заходит туда через браузер, оказывается на главной ezzzzko.tech — аккуратно, чисто и без “Your connection is not private”.
