Подтвердить что ты не робот

Почему Nginx возвращает 403, хотя все разрешения установлены правильно?

У меня есть настройка Nginx и отображение тестовой страницы. Если я попытаюсь изменить корневой путь, я получаю 403 Forbidden ошибку, хотя все разрешения идентичны. Кроме того, существует пользователь nginx.

nginx.conf:

user nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;

pid        /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    index   index.html index.htm;

    server {
        listen       80;
        server_name  localhost;
        root         /var/www/html; #changed from the default /usr/share/nginx/html
    }
}

namei -om/usr/share/nginx/html/index.html

f: /usr/share/nginx/html/index.html
dr-xr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxr-xr-x root root nginx
drwxr-xr-x root root html
-rw-r--r-- root root index.html

namei -om/var/www/html/index.html

f: /var/www/html/index.html
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxr-xr-x root root html
-rw-r--r-- root root index.html

журнал ошибок

2014/03/23 12:45:08 [ошибка] 5490 # 0: * 13 open() "/var/www/html/index.html" не удалось (13: отказ в доступе), клиент: XXX.XX.XXX.XXX, server: localhost, request: "GET/index.html HTTP/1.1", хост: "ec2-XXX-XX-XXX-XXX.compute-1.amazonaws.com"

4b9b3361

Ответ 1

Я использовал:

sudo service nginx start

Если я использую:

sudo nginx 

... все работает отлично. Может ли кто-нибудь объяснить разницу между этими двумя?

Ответ 2

У меня возникла одна и та же проблема, и это произошло из-за SELinux.

Чтобы проверить, работает ли SELinux:

# getenforce

Чтобы отключить SELinux до следующей перезагрузки:

# setenforce Permissive

Перезапустите Nginx и проверьте, не исчезла ли проблема. Если вы хотите постоянно изменять настройки, вы можете редактировать /etc/sysconfig/selinux

Если SELinux является вашей проблемой, вы можете запустить следующее, чтобы nginx мог обслуживать ваш каталог www (убедитесь, что вы включили SELinux, прежде чем тестировать это. i.e, # setenforce Enforcing)

# chcon -Rt httpd_sys_content_t /path/to/www

Если у вас все еще есть проблемы, посмотрите на логические флаги в getsebool -a, в частности вам может потребоваться включить httpd_can_network_connect для доступа к сети

# setsebool -P httpd_can_network_connect on

Для меня было достаточно, чтобы http мог обслуживать мой каталог www.

Ответ 3

Ну кажется логичным, все файлы являются пользователями root, попробуйте изменить его на пользователя nginx, просто хотите убедиться, что это не разрешено листинг.

sudo chown -R nginx:nginx /var/www/html

Ответ 4

Это дополнение к ответу Prowlas, но у меня нет достаточной репутации для комментирования: Если /path/to/www является домашним каталогом пользователя. Вы должны попробовать:

setsebool -P httpd_enable_homedirs=1

Это решило мою проблему

Источник: http://forums.fedoraforum.org/archive/index.php/t-250779.html

Ответ 5

Я столкнулся с той же проблемой:

  • Проверено nginx.conf для проверки пользователя
  • Разрешения были установлены правильно
  • Убедитесь, что для всего пути установлено значение "x".

Был ли перезапуск из командной строки (я все время использовал Webmin) и заметил эту ошибку:

 [email protected]:/var/www/test.local$ sudo service nginx restart
 * Restarting nginx nginx 
nginx: [warn] conflicting server name "test.local" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "test.local" on 0.0.0.0:80, ignored

По-видимому, было дублирующее определение, и, таким образом, моя попытка доступа к "test.local" не удалась.

Ответ 6

Я столкнулся с той же проблемой. Если вы используете Fedora/RedHat/CentOS, это может помочь вам:

  • В соответствии с SELinux: setsebool -P httpd_read_user_content 1

Надеюсь, что это поможет.

Ответ 7

Я столкнулся с этой проблемой, когда добавил нового пользователя с папкой /home/new_user в качестве нового виртуального хоста. Убедитесь, что эти папки (/home, /home/new_user, /home/new_user/xxx...) 755 так, что они разрешили мою проблему. Наконец, я обнаружил, что моя проблема была корректной в соответствии с файлом /var/log/nginx/error.log.

Ответ 8

это решило ту же проблему:

перезапустите Nginx и повторите попытку. Если это не удается, повторите проверку журналов. Это сработало для меня