nginx: không có quyền ràng buộc cổng 8090 nhưng nó liên kết với 80 và 8080


37

Tôi đang vật lộn với một số hành vi liên quan đến quyền lạ: khi tôi định cấu hình nginx để nghe cổng 8080, mọi thứ hoạt động như mong đợi, nhưng khi tôi sử dụng bất kỳ cổng nào khác, tôi nhận được một cái gì đó như

2014/01/10 09:20:02 [emerg] 30181#0: bind() to 0.0.0.0:8090 failed (13: Permission denied)

trong /var/log/nginx/error.log

Tôi không biết phải nhìn vào đâu để tôi thực sự không biết phần nào của cấu hình có thể thú vị.

trong nginx.conf nginx được cấu hình để chạy dưới dạng nginx:

user  nginx;

Ngoài ra người dùng nginx cũng ở trong một nhóm khác 'git'

trong trang web-config tôi đã cố gắng lắng nghe như thế này:

server {
    listen 8090; #does not work
    #listen 8080; #works
    #listen 9090; #does not work
    #listen 9090 default; #does not work neighter
    #listen 80; #works!
    server_name <some IP>;
    ...
}

Tôi chỉ có một người nghe nữa phục vụ cổng 443.

Khi tôi bắt đầu một số dịch vụ khác, ví dụ như SimpleHTTPServertrên cổng 8090, v.v. vì không root, mọi thứ đều hoạt động tốt:

$ python -m SimpleHTTPServer 8090
Serving HTTP on 0.0.0.0 port 8090 ...
localhost.localdomain - - [10/Jan/2014 09:34:19] "GET / HTTP/1.1" 200 -

Những lý do có thể cho các quyền bị từ chối nói chung là gì?

Hệ thống là Fedora 18 ngnix là chứng khoán fedora 1.2.9


Đầu tiên, bạn cần cập nhật lên phiên bản Fedora được hỗ trợ. Thứ hai, thử lại. Nếu vẫn thất bại, hãy kiểm tra /var/log/audit/audit.log.
Michael Hampton

2
Điều này không hữu ích lắm. Fedora 18 được vẫn được hỗ trợ và thậm chí nếu nó không phải là hệ thống cho phép Linux đã không thay đổi hoàn toàn kể từ đó.
frans

Phải ... thêm bốn ngày nữa.
Michael Hampton

Lặp lại câu trả lời stackoverflow.com/a/24830777/2443988
Sumit Ramteke

Câu trả lời:


52

Điều này rất có thể sẽ liên quan đến SELinux

semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

Như bạn có thể thấy từ đầu ra ở trên với SELinux trong chế độ thực thi, http chỉ được phép liên kết với các cổng được liệt kê. Giải pháp là thêm các cổng bạn muốn liên kết vào danh sách

semanage port -a -t http_port_t  -p tcp 8090

sẽ thêm cổng 8090 vào danh sách.


1
đó là nó, cảm ơn! Nhưng tại sao có quá ít thông tin? Tôi cũng đoán người khác cũng sử dụng Fedora với SELinux ..
frans

1
@frans: Có rất nhiều thông tin, bạn chỉ không biết về nó hoặc làm thế nào để truy cập và sử dụng nó. Nếu bạn có chế độ TỰ ĐỘNG trong chế độ thực thi hoặc cho phép thì tất cả các từ chối đều được ghi vào /var/log/audit.log. Có các công cụ có sẵn cho phép bạn lọc, hiểu và quản lý thông tin và chính sách của Selinux - hãy xem các trang fedora seliux và các trang hướng dẫn để tìm kiếm, aud2why, aud2allow.
user9517 hỗ trợ GoFundMonica

Nếu bạn nhận được semanage: command not found, bạn có thể cài đặt nó với yum install policycoreutils-python.
mwfearnley

8080 không được liệt kê cho http_port_t nhưng nó vẫn hoạt động, có ý tưởng nào tại sao không?
MaxiWheat
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.