Proxy (nginx) hiển thị lỗi Cổng xấu


18

Tôi có một dịch vụ (docker registry) chạy trên port 5000, tôi đã cài đặt nginx để chuyển hướng yêu cầu http từ 8080đến 5000. Nếu tôi thực hiện cuộn tròn để localhost:5000nó hoạt động, nhưng khi tôi thực hiện cuộn tròn để localhost:8080tôi gặp lỗi Cổng xấu .

tập tin cấu hình nginx:

upstream docker-registry {
 server localhost:5000;
}

server {
 listen 8080;
 server_name registry.mydomain.com;

 proxy_set_header Host       $http_host; 
 proxy_set_header X-Real-IP  $remote_addr; 
 client_max_body_size 0; 
 chunked_transfer_encoding on;

 location / {

     proxy_pass http://docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }

}

Trong /var/log/nginx/error.logtôi có:

[crit] 15595#0: *1 connect() to [::1]:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain.com, request: "GET / HTTP/1.1", upstream: "http://[::1]:5000/", host: "localhost:8080"

Bất kỳ ý tưởng?


Trong trường hợp của tôi, dịch vụ mà tôi ủy quyền đã chết (và tôi không nhận ra điều đó) ở giữa tôi sử dụng nó. Một giây tôi đã truy cập nó, giây tiếp theo tôi nhận được cổng xấu. Tôi đã phải khởi động lại dịch vụ.
Michael Plautz

Câu trả lời:


57

Tôi giả sử đó là một hộp Linux, vì vậy rất có thể SELinux đang ngăn kết nối vì không có chính sách nào cho phép kết nối.

Bạn có thể chạy

# setsebool -P httpd_can_network_connect true

và sau đó khởi động lại nginx.


Selinux bị vô hiệu hóa, cũng là tường lửa dịch vụ
hellb0y77

2
Bạn chỉ sửa lỗi của tôi , ngay cả khi bạn không sửa lỗi hellb0y77. SE_LINUX lại đình công!
Wesley Burr

1
Điều đó cũng làm việc cho tôi. Có ai có thêm thông tin về những gì nó thực sự làm? Tôi ghét không biết!
martinedwards

Được nâng cấp và làm việc trên centO 7, tôi có thể hỏi vấn đề bảo mật này có thể mở ra không. Tôi thường chạy một bộ quy tắc iptables cho phép lưu lượng truy cập cục bộ. Tự hỏi những gì hiệu ứng này.
edencorbin

1
@edencorbin nó cho phép các mô-đun httpd có thể kết nối với mạng.
Warren

5

Dựa trên thông báo lỗi, nó làm tôi tự hỏi nếu localhost: 5000 đang được giải quyết dưới dạng địa chỉ ipv6, mà bạn có thể không muốn. Bạn có thể thử thay đổi điều đó thành 127.0.0.1 giáp000

EDIT: Trong dòng proxy_pass của bạn, có thể bạn đang thiếu một phần của URL? Hãy thử thêm $ request_uri để có thể:

proxy_pass http://docker-registry/$request_uri;

hoặc có thể:

proxy_pass http://docker-registry$request_uri;

Không chắc cái nào đúng nhất.

Một điều khác để xem xét. Cấu hình của bạn cho biết:

server_name registry.mydomain.com;

Vì vậy, localhost: 8080 có thể không khớp. Để thử nghiệm, bạn có thể thay đổi điều này thành:

server_name registry.mydomain.com localhost;

Sau đó, localhost: 8080 sẽ được khớp, cũng như tên miền của bạn. Tôi giả sử registry.mydomain.com chỉ là một ví dụ và bạn sẽ đặt máy chủ thực sự FQDN của mình vào đó.


Không hoạt động, thiết lập 127.0.0.1:5000và tôi đã thử chỉ với server_name localhostserver_name registry.mydomain.com(thử từ một máy chủ khác trong cùng làn với tên máy chủ registry.mydomain.comtrong / etc / hosts), và cả hai, nhưng không có gì ... cùng một lỗi
hellb0y77

Whit registry.mydomain.com [crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain,com request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080", với localhost:[crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080"
hellb0y77
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.