Назад | Перейти на главную страницу

nginx: нет разрешения на привязку порта 8090, но он привязан к 80 и 8080

Я борюсь с каким-то странным поведением, связанным с разрешениями: когда я настраиваю nginx для прослушивания порта 8080, все работает, как ожидалось, но когда я использую любой другой порт, я получаю что-то вроде

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'

в конфиге сайта я пробовал слушать вот так:

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 и т. д. как без root все работает нормально:

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

В чем вообще могут быть причины отказа в разрешениях?

Система - это Fedora 18, ngnix - это стандартная Fedora 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 в список.