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 没有在 docker 容器内监听端口 7999。但是,在主机上我可以看到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 容器内的默认 nginx.conf在块include内有该指令http

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

如果您只是将 .conf 文件放入 conf.d 目录,nginx 将失败并显示以下错误消息:

2021/09/23 05:58:30 [emerg] 1#1: /etc/nginx/conf.d/blah.conf:1 中不允许使用“stream”指令

由于你的 nginx 正在运行,我只能假设你在启动后将配置放入目录中,并且没有重新启动或重新加载 nginx。

stream指令必须位于配置的根目录中,您还需要提供修改后的 nginx.conf。

从你的容器中复制 nginx.conf:

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

在那里添加您的配置,或者添加带有单独目录的第二个包含指令并将其作为卷挂载:

例如,在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,它就起作用了。

相关内容