Найти в Дзене

Доступ к домашнему серверу извне через домен

Оглавление

В данной статье я хотел бы затронуть тему удалённого доступа к ресурсам сервера извне имея свой домен (второго или третьего уровня).

IP адрес

Я уже очень давно подключил у своего провайдера услугу "Статический IP адрес" и с её помощью мне не составляет труда использовать данную схему. Без статического IP я, к сожалению, не знаю как сделать данную настройку постоянной, просто не сталкивался.

Настройка доменов

В панели управления доменами (я пользуюсь biz.mail.ru) нужно у домена (поддомена) добавить запись типа А и указать ваш IP адрес. После этого при переходе по IP в браузере вы скорее всего попадёте в панель управления роутером. Это нам совсем не нужно. Надо настроить проброс портов.

Настройка роутера

На любом более-менее современном роутере есть раздел в настройках, называемый "Проброс портов" или "Port Forwards". В некоторых прошивках может называться "Port Forwarding". Далее нам понадобится IP адрес контейнера (или железного сервера) в нашей домашней сети, на который будут идти запросы к 80 и 443 порту (порты по умолчанию для http и https запросов). Делаем примерно следующие настройки

Указываем с какого порта делать проброс, на какой IP и порт.

Настройка Nginx

В качестве веб-сервера на всех своих проектах (как дома, так и на работе) я использую Nginx уже много лет. Поэтому приведу конфиги именно для него.

После установки nginx (apt install nginx к примеру) переходим в директорию `/etc/nginx/conf.d/` и создаём наш первый конфиг, например для доступа к галерее фоток IMMICH.

nano immich.mydomain.ru.conf

Я обычно даю имена конфигам согласно домену/поддомену. Не забываем в конце добавить .conf, иначе Nginx не будет читать данный файл.

Для настройки нам необходимо знать на каком IP и порту висит наш сервер IMMICH. Теперь вставляем туда примерно такое содержимое:

server
{
client_max_body_size 10G;
server_name
immich.mydomain.ru;
location / {
proxy_read_timeout 9000;
proxy_pass http://192.168.1.23:2283;
proxy_set_header Host $host;
proxy_redirect http:// https://;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_connect_timeout 9000;
proxy_send_timeout 9000;
}
listen 80;
}

По сути - уже можно работать с доменом извне. Но для полноценной работы потребуется SSL сертификат. Для домашних проектов вполне подойдут сертификаты от Let's Encrypt. Для этого выполняем в терминале (на сервере или контейнере с Nginx) команду `certbot --nginx` и выбираем в предложенном списке наш домен. Если всё верно настроено на стороне панели управления доменами, то настройка сертификата пройдёт без проблем. И тогда сертбот добавит свои строки в конфиг, и домен станет доступен по защищённому соединению https.

Итоги

Данным образом у меня настроены все сервисы, к которым необходим доступ извне. Естественно нужно позаботиться о безопасности, создавая надёжные пароли к учётным записям на этих сервисах. Как по мне - так это самый простой способ получить доступ к сервисам через интернет (например с мобильного устройства вне дома).

Всем спасибо за чтение, за интерес, комментарии. Ссылка на добровольные донаты. Никого не заставляю, но буду благодарен.

Подписывайтесь на мой канал в телеграме https://t.me/kai_zer_ru_public