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

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

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

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::2377                 :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::7946                 :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::80                   :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::443                  :::*                    LISTEN      24477/dockerd       
tcp6       0      0 :::7999                 :::*                    LISTEN      24477/dockerd   

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

Cloning into 'repo_name'...
ssh: connect to host domain-name.com port 7999: Connection refused
fatal: Could not read from remote repository.

И когда я это делаю, telnet domain-name.com 7999я получаю telnet: Unable to connect to remote host: Connection refused.

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

docker-compose.yaml (nginx)

services:
    nginx:
        ports:
            - "80:8080"
            - "443:8443"
            - "7999:7997"

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

stream {
    server {
        listen 7997;
        proxy_pass bitbucket1.cybertron.ninja:7998;
    }
}

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

root@6d123f454eef:/# netstat -pnlt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name                                                                        
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:*               LISTEN      -            

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

решение1

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

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

http {
    # ...
    include /etc/nginx/conf.d/*.conf;
}

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

2021/09/23 05:58:30 [emerg] 1#1: директива "stream" не допускается здесь в /etc/nginx/conf.d/blah.conf:1

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

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

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

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

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

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

include /etc/nginx/conf.stream.d/*.conf;

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

services:
nginx:
    image: nginx
    volumes:
        - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
        - ./config/nginx:/etc/nginx/conf.d:ro
        - ./config/nginx_stream:/etc/nginx/conf.stream.d:ro

запустил docker-compose up -d, и все работает.

Связанный контент