Вы не можете получить доступ к приложению на сервере?

Я пытаюсь создать простое REST API. Следуя видеоурокам, я выполнил команду <code>dotnet new webapi -o api</code>. Шаблонный проект успешно создан, он запускается на локальном сервере и открывает страницу Swagger. Все выглядит нормально. 

Однако, после установки .NET SDK 8.0 на VDS и выполнения тех же действий, я запустил приложение через консоль SSH и увидел, что оно работает на порту 5135. Когда я попытался подключиться к этому приложению по IP и доменному имени, результат оказался безуспешным. Я открыл доступ к этому порту в фаерволе, но все равно получаю ошибку ERR_CONNECTION_REFUSED в браузере. Я ощущаю, что решение этой проблемы довольно простое, но не могу понять, в каком направлении искать.
  • 25 января 2025 г. 16:34
Ответы на вопрос 4
Проблема с доступом к вашему REST API на сервере может быть связана с несколькими факторами. Вот шаги, которые стоит проверить для устранения проблемы:

1. **Проверка настроек привязки**:
   Убедитесь, что ваше приложение слушает на правильном IP-адресе. По умолчанию ASP.NET Core приложения слушают на `localhost`, что означает, что они доступны только с того же устройства, на котором выполняется сервер. Чтобы ваше приложение было доступно извне, вам нужно заставить его слушать на всех интерфейсах. Для этого откройте файл `appsettings.json` и добавьте (или измените) следующий параметр:

   ```json
   "Kestrel": {
       "Endpoints": {
           "Http": {
               "Url": "http://*:5135"
           }
       }
   }
   ```

   Также можно добавить `<urls>` в `Program.cs`:

   ```csharp
   webBuilder.UseUrls("http://*:5135");
   ```

2. **Проверка фаервола**:
   Вы упомянули, что открыли порт в фаерволе, но стоит убедиться, что он действительно открыт. Используйте следующую команду для проверки активных правил фаервола:

   ```bash
   sudo ufw status
   ```

   Если порт 5135 не открыт, вы можете открыть его командой:

   ```bash
   sudo ufw allow 5135
   ```

   Если используете `iptables`, команда будет выглядеть иначе.

3. **Проверка запущенных процессов**:
   Проверьте, что приложение действительно запущено и слушает на нужном порту. Вы можете использовать команду `netstat` или `ss` для этой проверки:

   ```bash
   sudo netstat -tuln | grep 5135
   ```

   Или:

   ```bash
   sudo ss -tuln | grep 5135
   ```

   Убедитесь, что приложение запущено на нужном IP и порту.

4. **Проверка доступа по IP и доменному имени**:
   Попробуйте подключиться к вашему приложению по IP-адресу сервера с локальной машины, используя `curl`:

   ```bash
   curl http://<ваш_серверный_IP>:5135
   ```

   Если это сработает, но не работает в браузере, возможно, проблема в кэшировании DNS или сетевых настройках браузера.

5. **Проверка логов приложения**:
   Посмотрите логи приложения, чтобы убедиться, что нет ошибок при запуске, которые могут влиять на доступность приложения.

После выполнения этих шагов у вас должны быть дополнительные подсказки о том, что может быть не так. Если проблема остается, пожалуйста, предоставьте дополнительные детали о конфигурации и среде.
Проект настроен на прослушивание локалхост… что видно из лога 
Перенастройте проект на прослушивания любого ip
см логи: 
Строка Now listening on говорит что приложение и правда работает на порту 5135, но слушает localhost - т.е. обратиться к нему можно только с той же виртуалки.
Решить можно двумя способами:
1. quick and dirty - в appsettings.json попросить Kestrel (это встроенный сервер в дотнете) слушать 0.0.0.0
2. более правильный - установить nginx и проксировать запрос на кестрел, слушающий локалхост.
По порту 5135 можно подключиться только с этого же хоста. Вам нужно использовать прокси или веб-сервер в режиме проксирвоания. Обчно запускают nginx и настраивают переадресацию входящих запросов на определённый порт локалхоста.
Похожие вопросы