이상한 권한 관련 동작으로 어려움을 겪고 있습니다. 포트 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을 목록에 추가합니다.