Я использую конфигурацию по умолчанию при добавлении определенного каталога с 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
. Я не знаю, что еще нужно установить.
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
umask
. Если вам нужно более общее решение, которое не требует chmod
каждого нового каталога, тогда есть решение. Требуется обратная групповая ассоциация ( username
для www-data
group) и использование setgid
. Не стесняйтесь отправлять новый вопрос для более подробного описания, и я буду рад ответить.
У меня была такая же проблема в окне CentOS 7.
Кажется, я ударил selinux. Надевание selinux в разрешающий режим (setenforce permissive
) уже работало над проблемой. Я попробую и вернусь с правильным исправлением.
В 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 ГБ.
setenforce 0
. Однако, оглядываясь назад на то, что на самом деле делает это решение, я понял, что мне нужно повторно запустить команды, чтобы обновить разрешения для пользователя nginx. Это, похоже, сработало, и я мог вернуть SELinux к принудительному исполнению.
Nginx должен иметь + x доступ ко всем каталогам, ведущим к корневому каталогу сайта.
Убедитесь, что у вас есть + x во всех каталогах пути, ведущего к корню сайта. Например, если корнем сайта является /home/username/siteroot:
chmod +x /home/
chmod +x /home/username
chmod +x /home/username/siteroot
У вас может быть Linux с улучшенной безопасностью, поэтому добавьте правило для этого. У меня было 13 ошибок, хотя были установлены разрешения и существовал пользователь.
chcon -Rt httpd_sys_content_t /username/test/static
Симптом:
Не удалось загрузить изображения в медиа-библиотеку 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
По умолчанию статические данные при установке nginx будут в /var/www/html. Таким образом, вы можете просто скопировать свою статическую папку в/var/html/и установить
root /var/www/<your static folder>
в ngix.conf(или/etc/nginx/sites-available/default)
Это работало для меня на ubuntu, но я думаю, что это не должно сильно отличаться для других дистрибутивов.
Надеюсь, это поможет.
В моем случае папка, в которой выполнялись файлы, была символической ссылкой на другую папку, сделанную с помощью
ln -sf /origin /var/www/destination
Несмотря на то, что разрешения (пользователь и группа), где они правильны в папке назначения (символическая ссылка), у меня все еще была ошибка, потому что Nginx также нуждался в разрешениях для всей иерархии исходной папки.
Измените 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
Я нашел обходной путь: переместил папку в папку конфигурации nginx, в моем случае "/etc/nginx/my-web-app". А затем изменили разрешения для пользователя root "sudo chown -R root: root" my-web-app ".
Я столкнулся с этой проблемой, я решил разрешить пользователю nginx разрешать и группировать что-то вроде этого:
chown -R nginx:nginx /username/test/static
У меня была такая же проблема, я использую Plesk Onyx 17 с Centos7. Я мог видеть эту ошибку в proxy_error_log в журналах поврежденных доменов. Все файлы/файлы в/var/www/vhosts/принадлежат соответствующим пользователям (владельцам доменов), и вы можете видеть, что все они находятся в группе psacln. Таким образом, решение заключалось в том, чтобы добавить nginx в эту группу, чтобы он мог видеть, что ему нужно:
usermod -aG psacln nginx
И действительно, перезапустите nginx и перезагрузите страницу с помощью Ctrl + F5.
www-data
пользователь можетcd
к/username/test/static
каталог:sudo -u www-data cd /username/test/static