nginx : 포트 8090을 바인딩 할 권한이 없지만 80 및 8080에 바인딩 됨 listen 8090; #does not work

이상한 권한 관련 동작으로 어려움을 겪고 있습니다. 포트 8080을 수신하도록 nginx를 구성하면 모든 것이 예상대로 작동하지만 다른 포트를 사용하면 다음과 같은 결과가 나타납니다.

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

…에서 /var/log/nginx/error.log

어디에서 볼지 실마리가 없으므로 구성의 어떤 부분이 흥미로울 지 모르겠습니다.

nginx.conf에서 nginx는 nginx로 실행되도록 구성되어 있습니다.

user  nginx;

또한 사용자 nginx가 다른 그룹 ‘git’에 있습니다.

site-config에서 다음과 같이 들으려고했습니다.

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>;
    ...
}

포트 443을 제공하는 리스너가 하나 더 있습니다.

SimpleHTTPServer루트가 아닌 포트 8090 등의 다른 서비스를 시작하면 모든 것이 잘 작동합니다.

$ 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 -

일반적으로 권한이 거부 된 이유는 무엇입니까?

시스템은 페도라 18 NGnix는 스톡 페도라 1.2.9입니다



답변

이것은 아마도 SELinux와 관련이있을 것입니다

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

위의 출력에서 ​​볼 수 있듯이 SELinux의 시행 모드에서 http는 나열된 포트에만 바인딩 할 수 있습니다. 해결책은 바인딩하려는 포트를 목록에 추가하는 것입니다.

semanage port -a -t http_port_t  -p tcp 8090

포트 8090을 목록에 추가합니다.