nginx реверсивный прокси недоступен на порту

Вопрос или проблема

Настройка очень простая. Запущен контейнер Docker, который слушает порт 2283. К нему можно получить доступ через браузер сервера по адресу http://localhost:2283

У меня есть следующая конфигурация nginx:

    server {
        listen 88;
        server_name _;

    location /{
            proxy_pass http://localhost:2283;
        }
}

Сервис Docker затем можно будет доступен на том же сервере по адресу: http://localhost:88

Но на другом устройстве той же сети я не могу подключиться (тайм-аут) к http://<внутренний IP сервера>:88, тогда как http://<внутренний IP сервера>:2283 доступен.

Брандмауэр ufw неактивен, и я могу подтвердить, что nginx слушает порт 88:

tcp        0      0 0.0.0.0:88           0.0.0.0:*               LISTEN     
tcp6       0      0 :::88                :::*                    LISTEN     

Это мой первый опыт использования его в качестве обратного прокси. Я сейчас так сбит с толку. Любая помощь будет оценена.

Ответ или решение

Разрешение проблемы с недоступностью порта NGINX Reverse Proxy

Введение

Проблема, которая была описана, заключается в том, что в то время как Docker-контейнер, прослушивающий порт 2283, доступен локально, конфигурация NGINX для проксирования на порт 88 не позволяет подключаться с других устройств в одной сети. В этом ответе мы детально рассмотрим возможные причины и пути их устранения.

Анализ конфигурации

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

server {
    listen 88;
    server_name _;

    location / {
        proxy_pass http://localhost:2283;
    }
}

Важные замечания:

  1. Слушание на порту: Ваш NGINX успешно прослушивает порт 88, что подтверждается результатами команды netstat. Это означает, что сервер NGINX активен и готов принимать входящие запросы.

  2. Локальная доступность: Вы можете получить доступ к вашему Docker-сервису по адресу http://localhost:2283, что также указывает на то, что сервис работает корректно на локальном хосте.

Проверка подключения из локальной сети

Сложности начинаются, когда вы пытаетесь получить доступ к http://<внутренний_IP_сервера>:88 с другого устройства в сети. Ниже перечислены несколько причин, по которым это может происходить:

  1. Настройки брандмауэра:

    • Хотя вы указали, что ufw неактивен, следует убедиться, что другие сетевые фильтры или брандмауэры, такие как iptables, также не блокируют входящие соединения на порт 88.
  2. Проблемы с маршрутизацией:

    • Проверьте, что ваше устройство находится в одной подсети с сервером, и что маршруты настроены правильно. Убедитесь, что нет ограничений на уровне маршрутизатора, которые могут блокировать доступ к определённым портам.
  3. Использование localhost в конфигурации:

    • Когда вы используете localhost в proxy_pass, это указывает на получение локального обращения к порту 2283. Ваша конфигурация может быть изменена, чтобы слушать не только локальные обращения, но и внешние IP. Попробуйте изменить строку на:
      proxy_pass http://127.0.0.1:2283;
    • Это может помочь, если NGINX работает в режиме, когда не все запросы обрабатываются корректно.

Тестирование подключения

  1. Логирование ошибок: Проверьте логи NGINX. Файлы журналов (обычно находятся в /var/log/nginx/error.log) могут содержать полезную информацию о причинах проблем с доступом.

  2. Инструменты отладки: Используйте инструменты, такие как curl или wget, чтобы проверить доступность порта 88 из других устройств вашей сети:

    curl -I http://<внутренний_IP_сервера>:88

Заключение

После выполнения всех вышеуказанных шагов и рекомендаций вы должны быть в состоянии устранить проблему с недоступностью порта NGINX reverse proxy. Если проблема сохраняется, возможно, стоит рассмотреть обновление NGINX или провести дополнительную диагностику сети для выявления других потенциальных конфликтов.

Эти меры помогут вам настроить и оптимизировать вашу среду для работы с NGINX и Docker, а также гарантируют, что ваши сервисы будут доступны для всех, кто нуждается в них.

Оцените материал
Добавить комментарий

Капча загружается...