Рейтинг:0

Nginx не открывает указанный порт прослушивания

флаг cn

Я пытаюсь проксировать SSH-трафик от nginx (прослушивающий порт 7999) на сервер битбакета (прослушивающий порт 7998) на серверной части. И nginx, и битбакет работают внутри контейнеров Docker. Если я войду в контейнер nginx и сделаю телнет bitbucket.domain-name.com 7998 это соединяется. На хост-машине, если я это сделаю netstat -pnlt Я получил:

Активные интернет-соединения (только серверы)
Proto Recv-Q Send-Q Локальный адрес Внешний адрес Состояние PID/имя программы    
tcp6 0 0 :::2377 :::* ПРОСЛУШАТЬ 24477/dockerd       
tcp6 0 0 :::7946 :::* ПРОСЛУШАТЬ 24477/dockerd       
tcp6 0 0 :::80 :::* ПРОСЛУШАТЬ 24477/dockerd       
tcp6 0 0 :::443 :::* ПРОСЛУШАТЬ 24477/dockerd       
tcp6 0 0 :::7999 :::* ПРОСЛУШАТЬ 24477/dockerd   

Но я, когда делаю это на своем компьютере: клонировать git ssh://[email protected]:7999/project_key/repo_name.git я получил

Клонирование в 'repo_name'...
ssh: подключиться к хосту domain-name.com, порт 7999: подключение отклонено
фатальный: Не удалось прочитать из удаленного репозитория.

И когда я делаю telnet доменное имя.com 7999 я получил telnet: невозможно подключиться к удаленному хосту: в соединении отказано.

Кажется, проблема в том, что nginx не прослушивает порт 7999 внутри контейнера докеров. Но на хосте я вижу докерд прослушивает порт 7999. Я предполагаю, что у меня может быть неправильная конфигурация nginx, но я не уверен. Вот соответствующие биты из файлов конфигурации.

docker-compose.yaml (nginx)

Сервисы:
    нгинкс:
        порты:
            - "80:8080"
            - "443:8443"
            - "7999:7997"

nginx.conf (внутри контейнера nginx)

транслировать {
    сервер {
        слушать 7997;
        proxy_pass bitbucket1.cybertron.ninja:7998;
    }
}

И вот некоторый вывод, выполненный внутри контейнера nginx:

root@6d123f454eef:/# netstat -pnlt
Активные интернет-соединения (только серверы)
Proto Recv-Q Send-Q Локальный адрес Внешний адрес Состояние PID/имя программы                                                                        
TCP 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 10/nginx: master pr                                                                     
TCP 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 10/nginx: master pr                                                                     
TCP 0 0 127.0.0.11:44703 0.0.0.0:* ПРОСЛУШИВАТЬ -            

Любые идеи, как решить эту проблему? Я в тупике.

tilleyc avatar
флаг us
У вас есть iptables, firewalld или любой другой брандмауэр?
флаг in
Похоже, nginx не читает ваш файл конфигурации. Куда ты его положил? Входит ли он в основной конфиг?
флаг cn
@tilleyc iptables запущен, но пользовательские правила не определены, только те, которые автоматически определены dockerd.
флаг cn
@GeraldSchneider вот выдержка из `docker-compose.yaml`: тома: - ./configs/nginx:/etc/nginx/conf.d:ro. Я могу подтвердить, что nginx действительно читает файлы конфигурации. Если бы это было не так, порты 80->8080 или 443->8443 не проксировались бы.
флаг in
Ваш вывод netstat внутри контейнера не показывает порт 7997 из вашей конфигурации. Если вы добавили эту конфигурацию позже, вы перезапустили контейнер?
Рейтинг:1
флаг in

Я только что создал тестовую среду для вашего случая с небольшой информацией, которую вы предоставили. Предполагая, что вы предоставили все, что вы изменили, это не может работать.

nginx.conf по умолчанию внутри официального контейнера nginx имеет включать директива внутри http блокировать:

http {
    # ...
    включить /etc/nginx/conf.d/*.conf;
}

Если вы просто поместите файл .conf в каталог conf.d, nginx завершится ошибкой со следующим сообщением об ошибке:

23.09.2021, 05:58:30 [возникновение] 1#1: здесь в /etc/nginx/conf.d/blah.conf:1 не разрешена директива «stream».

Поскольку ваш nginx работает, я могу только предположить, что вы поместили конфигурацию в каталог после ее запуска и не перезапустили или не перезагрузили nginx.

транслировать директива должна быть в корне конфигурации, также необходимо предоставить модифицированный nginx.conf.

Скопируйте nginx.conf из вашего контейнера:

docker cp test_nginx_1:/etc/nginx/nginx.conf .

Добавьте туда свой конфиг или добавьте вторую директиву include с отдельной директорией и тоже смонтируйте ее как том:

Например, добавьте за пределы http {} блокировать:

включить /etc/nginx/conf.stream.d/*.conf;

Добавьте это в свой docker-compose.yml

Сервисы:
нгинкс:
    изображение: nginx
    тома:
        - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
        - ./config/nginx:/etc/nginx/conf.d:ро
        - ./config/nginx_stream:/etc/nginx/conf.stream.d:ro

бег docker-compose up -d, и это работает.

Ответить или комментировать

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