web-dev-qa-db-fra.com

nginx: aucune autorisation de lier le port 8090 mais il se lie à 80 et 8080

Je me bats avec un comportement étrange lié aux autorisations: lorsque je configure nginx pour écouter le port 8080, tout fonctionne comme prévu, mais lorsque j'utilise un autre port, j'obtiens quelque chose comme

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

dans /var/log/nginx/error.log

Je n'ai aucune idée où regarder, donc je ne sais pas vraiment quelles parties de la configuration pourraient être intéressantes.

dans nginx.conf nginx est configuré pour s'exécuter en tant que nginx:

user  nginx;

L'utilisateur nginx est également dans un autre groupe 'git'

dans la configuration du site, j'ai essayé d'écouter comme ceci:

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

Je n'ai qu'un écouteur de plus qui dessert le port 443.

Lorsque je démarre un autre service, par exemple un SimpleHTTPServer sur le port 8090 etc. comme non root, tout fonctionne correctement:

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

Quelles peuvent être les raisons du refus d'autorisations en général?

Le système est Fedora 18 ngnix est stock Fedora 1.2.9

39
frans

Cela sera probablement lié à SELinux

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

Comme vous pouvez le voir dans la sortie ci-dessus avec SELinux en mode d'application, http n'est autorisé qu'à se lier aux ports répertoriés. La solution consiste à ajouter les ports que vous souhaitez lier à la liste

semanage port -a -t http_port_t  -p tcp 8090

ajoutera le port 8090 à la liste.

59
user9517