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