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。以下是設定檔中的相關位元。

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,它起作用了。

相關內容