Nginx: stat() не удалось (13: отказ в доступе)

Я использую конфигурацию по умолчанию при добавлении определенного каталога с nginx, установленным на моем компьютере ubuntu 12.04.

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                root /username/test/static;
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
...

...
}

Я просто хочу, чтобы простой статический сервер nginx обслуживал файлы из этого каталога. Однако, проверяя error.log, я вижу

2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "domain"
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html

Я уже сделал chown -R www-data:www-data на /username/test/static, я установил их в chmod 755. Я не знаю, что еще нужно установить.

Ответ 1

Nginx работает в каталоге, поэтому, если вы не можете cd в этом каталоге от пользователя nginx, он будет терпеть неудачу (как и команда stat в вашем журнале). Убедитесь, что www-user может cd полностью соответствовать /username/test/static. Вы можете подтвердить, что stat завершится с ошибкой или не удастся, запустив

sudo -u www-data stat /username/test/static

В вашем случае, вероятно, здесь находится каталог /username. Обычно www-data не имеет разрешений для cd для домашних каталогов других пользователей.

Лучшим решением в этом случае было бы добавить группу www-data в username:

gpasswd -a www-data username

и убедитесь, что группа username может ввести все каталоги по пути:

chmod g+x /username && chmod g+x /username/test && chmod g+x /username/test/static

Для ваших изменений в работе перезапустите nginx

nginx -s reload

Ответ 2

У меня была такая же проблема в окне CentOS 7.

Кажется, я ударил selinux. Надевание selinux в разрешающий режим (setenforce permissive) уже работало над проблемой. Я попробую и вернусь с правильным исправлением.

Ответ 3

В CentOS 7.0 у меня была проблема с Access Deined, вызванная SELinux, и эти шаги решили проблему:

yum install -y policycoreutils-devel
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp

Обновление: Просто обратите внимание на то, что я узнал, используя виртуальные Linux-серверы digitalocean, или как они называют их капельками. Использование SELinux требует достаточного количества оперативной памяти. Скорее всего, вам не удастся запустить и управлять SELinux на капле с объемом памяти менее 2 ГБ.

Ответ 4

Nginx должен иметь + x доступ ко всем каталогам, ведущим к корневому каталогу сайта.

Убедитесь, что у вас есть + x во всех каталогах пути, ведущего к корню сайта. Например, если корнем сайта является /home/username/siteroot:

chmod +x /home/
chmod +x /home/username
chmod +x /home/username/siteroot

Ответ 5

У вас может быть Linux с улучшенной безопасностью, поэтому добавьте правило для этого. У меня было 13 ошибок, хотя были установлены разрешения и существовал пользователь.

chcon -Rt httpd_sys_content_t /username/test/static

Ответ 6

Симптом:

Не удалось загрузить изображения в медиа-библиотеку WordPress.

Причина:

(CentOS) yum update

Ошибка:

2014/10/22 18:08:50 [crit] 23286#0: *5332 open() "/var/lib/nginx/tmp/client_body/0000000003" failed (13: Permission denied), client: 1.2.3.4, server: _, request: "POST /wp-admin/media-new.php HTTP/1.1", host: "example.com", referrer: "http://example/wp-admin/media-new.php"

Решение:

chown -R www-data:www-data /var/lib/nginx

Ответ 7

По умолчанию статические данные при установке nginx будут в /var/www/html. Таким образом, вы можете просто скопировать свою статическую папку в/var/html/и установить

root /var/www/<your static folder>

в ngix.conf(или/etc/nginx/sites-available/default)

Это работало для меня на ubuntu, но я думаю, что это не должно сильно отличаться для других дистрибутивов.

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

Ответ 8

В моем случае папка, в которой выполнялись файлы, была символической ссылкой на другую папку, сделанную с помощью

ln -sf /origin /var/www/destination

Несмотря на то, что разрешения (пользователь и группа), где они правильны в папке назначения (символическая ссылка), у меня все еще была ошибка, потому что Nginx также нуждался в разрешениях для всей иерархии исходной папки.

Ответ 9

У меня была такая же проблема, я использую Plesk Onyx 17 с Centos7. Я мог видеть эту ошибку в proxy_error_log в журналах поврежденных доменов. Все файлы/файлы в/var/www/vhosts/принадлежат соответствующим пользователям (владельцам доменов), и вы можете видеть, что все они находятся в группе psacln. Таким образом, решение заключалось в том, чтобы добавить nginx в эту группу, чтобы он мог видеть, что ему нужно:

usermod -aG psacln nginx

И действительно, перезапустите nginx и перезагрузите страницу с помощью Ctrl + F5.

Ответ 10

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

chown -R nginx:nginx /username/test/static

Ответ 11

Я нашел обходной путь: переместил папку в папку конфигурации nginx, в моем случае "/etc/nginx/my-web-app". А затем изменили разрешения для пользователя root "sudo chown -R root: root" my-web-app ".

Ответ 12

Измените user свойство nginx.conf для www-static файлов www.

#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user your_user_name;

# same other config