Điểm:0

Nginx không mở cổng nghe được chỉ định

lá cờ cn

Tôi đang cố gắng ủy quyền lưu lượng truy cập SSH từ nginx (nghe trên cổng 7999) đến máy chủ bitbucket (nghe trên cổng 7998) ở mặt sau. Cả nginx và bitbucket đều đang chạy bên trong Docker container. Nếu tôi đăng nhập vào nginx container và làm telnet bitbucket.domain-name.com 7998 nó kết nối. Trên máy chủ nếu tôi làm netstat -pnlt Tôi có:

Kết nối Internet đang hoạt động (chỉ máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Địa chỉ nước ngoài Trạng thái PID/Tên chương trình    
tcp6 0 0 :::2377 :::* NGHE 24477/dockerd       
tcp6 0 0 :::7946 :::* NGHE 24477/dockerd       
tcp6 0 0 :::80 :::* NGHE 24477/dockerd       
tcp6 0 0 :::443 :::* NGHE 24477/dockerd       
tcp6 0 0 :::7999 :::* NGHE 24477/dockerd   

Nhưng, khi tôi làm điều này trên máy tính của mình: git clone ssh://[email protected]:7999/project_key/repo_name.git tôi có

Nhân bản thành 'repo_name'...
ssh: kết nối với máy chủ tên miền-cổng.com 7999: Kết nối bị từ chối
gây tử vong: Không thể đọc từ kho lưu trữ từ xa.

Và khi tôi làm tên miền telnet.com 7999 tôi có telnet: Không thể kết nối với máy chủ từ xa: Kết nối bị từ chối.

Có vẻ như vấn đề là nginx không nghe trên cổng 7999 bên trong bộ chứa docker. Nhưng, trên máy chủ tôi có thể thấy dockerd đang nghe trên cổng 7999. Tôi tưởng tượng rằng tôi có thể không có cấu hình nginx chính xác, nhưng tôi không chắc. Đây là các bit có liên quan từ các tập tin cấu hình.

docker-compose.yaml (nginx)

dịch vụ:
    nginx:
        cổng:
            - "80:8080"
            - "443:8443"
            - "7999:7997"

nginx.conf (bên trong nginx container)

dòng {
    người phục vụ {
        nghe 7997;
        proxy_pass bitbucket1.cybertron.ninja:7998;
    }
}

Và đây là một số đầu ra được thực thi bên trong nginx container:

root@6d123f454eef:/# netstat -pnlt
Kết nối Internet đang hoạt động (chỉ máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Địa chỉ nước ngoài Trạng thái PID/Tên chương trình                                                                        
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:* NGHE -            

Bất kỳ ý tưởng làm thế nào để khắc phục vấn đề này? Tôi bối rối.

tilleyc avatar
lá cờ us
Bạn có iptables, tường lửa hoặc bất kỳ tường lửa nào khác đang chạy không?
lá cờ in
Có vẻ như nginx không đọc tệp cấu hình của bạn. Bạn đã đặt nó ở đâu? Nó có được bao gồm trong cấu hình chính không?
lá cờ cn
@tilleyc iptables đang chạy, nhưng không có quy tắc tùy chỉnh nào được xác định, chỉ những quy tắc được dockerd tự động xác định.
lá cờ cn
@GeraldSchneider đây là một đoạn trích từ `docker-compose.yaml`: volume: - ./configs/nginx:/etc/nginx/conf.d:ro. Tôi có thể xác nhận rằng nginx thực sự đang đọc các tệp cấu hình của nó. Nếu không, nó sẽ không ủy quyền cho các cổng 80->8080 hoặc 443->8443.
lá cờ in
Đầu ra netstat của bạn từ bên trong vùng chứa không hiển thị cổng 7997 từ cấu hình của bạn. Nếu bạn đã thêm cấu hình đó sau, bạn có khởi động lại vùng chứa không?
Điểm:1
lá cờ in

Tôi chỉ thiết lập một môi trường thử nghiệm cho trường hợp của bạn với ít thông tin bạn cung cấp. Giả sử những gì bạn cung cấp là mọi thứ bạn đã thay đổi, điều này không thể hoạt động.

Nginx.conf mặc định bên trong bộ chứa nginx chính thức có bao gồm chỉ thị bên trong một http chặn:

http {
    #...
    bao gồm /etc/nginx/conf.d/*.conf;
}

Nếu bạn chỉ đặt tệp .conf của mình vào thư mục conf.d, nginx sẽ không thành công với thông báo lỗi sau:

23/09/2021 05:58:30 [mới nổi] 1#1: Lệnh "stream" không được phép ở đây trong /etc/nginx/conf.d/blah.conf:1

Vì nginx của bạn đang chạy nên tôi chỉ có thể cho rằng bạn đã đặt cấu hình vào thư mục sau khi nó bắt đầu và không khởi động lại hoặc tải lại nginx.

Các dòng chỉ thị phải nằm trong thư mục gốc của cấu hình, bạn cũng cần cung cấp nginx.conf đã sửa đổi.

Sao chép nginx.conf từ vùng chứa của bạn:

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

Thêm cấu hình của bạn vào đó hoặc thêm một lệnh bao gồm thứ hai với một thư mục riêng và cũng gắn nó dưới dạng một ổ đĩa:

Ví dụ: thêm bên ngoài {} chặn:

bao gồm /etc/nginx/conf.stream.d/*.conf;

Thêm phần này vào docker-compose.yml của bạn

dịch vụ:
nginx:
    hình ảnh: nginx
    khối lượng:
        - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
        - ./config/nginx:/etc/nginx/conf.d:ro
        - ./config/nginx_stream:/etc/nginx/conf.stream.d:ro

chạy docker-compose up -d, Và nó hoạt động.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.