Nginx обслуживает статический файл и получил запрет на использование 403
Просто хочу помочь кому-то. да, вы просто хотите использовать статический файл с помощью nginx, и вы все получили в nginx.conf:
location /static {
autoindex on;
#root /root/downloads/boxes/;
alias /root/downloads/boxes/;
}
Но, в конце концов, вы потерпели неудачу. У вас "запрещено 403" из браузера...
---------------------------------------- Ответ ниже: ----------------------------------------
Решение очень просто:
Способ 1: Запустите nginx в качестве пользователя в качестве владельца /root/downloads/boxes/ '
В nginx.conf:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
ДА, в первой строке " #user noboy;" просто удалите " #" и измените " никто" на свой собственное имя пользователя в Linux/OS X, т.е. перейти на " root" для теста. Перезапуск nginx.
Внимание. Лучше не запускать nginx как root! Здесь просто для тестирования, это опасно для Хакера.
Подробнее см. nginx (движок X) - какая боль в BUM! [13: Разрешение отклонено]
Путь 2: изменить '/root/downloads/boxes/' владельца на 'www-data' или 'nobody'
В Terminal:
ps aux | grep nginx
Получить имя пользователя для запуска nginx. Это должно быть 'www-data' или 'nobody', определяемое версией nginx. Затем нажмите "Терминал" (используйте "www-data" ):
chown -R www-data:www-data /root/downloads/boxes/
------------------------------ Еще одна важная вещь: ---- --------------------------
Эти родительские каталоги "/" , "/root" , "/root/downloads" должны предоставить разрешение execute (x) до 'www-data' или 'nobody'. то есть.
ls -al /root
chmod o+x /root
chmod o+x /root/downloads
Для получения дополнительной информации см. Разрешение "Запрещенная ошибка 403" и Nginx 403 запрещено для всех файлов
Ответы
Ответ 1
Вы должны дать разрешения nginx для чтения файла. Это означает, что вы должны дать пользователю, который запускает процесс nginx, права на чтение файла.
Этот пользователь, который запускает процесс nginx, настраивается с помощью директивы user
в конфигурации nginx, обычно расположенной где-то в верхней части nginx.conf
:
user www-data
http://wiki.nginx.org/CoreModule#user
Второй аргумент, который вы даете user
, это группа, но если вы не укажете ее, она использует тот же самый, что и пользователь, так что в моем примере пользователь и группа оба являются www-data
.
Теперь файлы, которые вы хотите использовать в nginx, должны иметь правильные права доступа. У Nginx должны быть права на чтение файлов. Вы можете дать группе www-data
права на чтение файла, подобного этому:
chown :www-data my-file.html
http://linux.die.net/man/1/chown
с помощью chown
вы можете изменить пользователя и владельца группы файла. В этой команде я изменяю только группу, если вы также измените пользователя, вы должны указать имя пользователя ДО двоеточия, например chown www-data:www-data my-file.html
. Но правильной установки прав доступа группы должно быть достаточно, чтобы nginx мог прочитать файл.
Ответ 2
Так как Nginx обрабатывает статические файлы напрямую, ему нужен доступ к соответствующим каталогам. Мы должны предоставить ему исполняемые разрешения для нашего домашнего каталога.
Самый безопасный способ сделать это - добавить пользователя Nginx в нашу собственную группу пользователей. Затем мы можем добавить исполняемые разрешения владельцам групп нашего домашнего каталога, предоставив только Nginx для работы с файлами:
sudo usermod -a -G your_user nginx
chmod 710/home/ your_user
Ответ 3
для принятого ответа
sudo chown -R :www-data static_folder
для изменения владельца группы всех файлов в этой папке
Ответ 4
После того, как вы вникли в очень полезные ответы, решили собрать все, что связано с разрешениями как рецепт. В частности, самое простое решение с максимальной безопасностью (= минимальные разрешения).
- Предположим, мы разворачиваем сайт как пользователь
admin
, то есть она владеет сайтом и все внутри. Мы не хотим запустить nginx как этот пользователь (слишком много разрешений). Это нормально для тестирования, а не для продукта.
- По умолчанию Nginx запускает рабочих как пользователь
nginx
, то есть config содержит строку user nginx
- По умолчанию пользователь
nginx
находится в группе с тем же именем: nginx
.
- Мы хотим предоставить минимальные разрешения пользователю
nginx
без изменения права собственности на файл. Это, кажется, самый безопасный из наивных вариантов.
-
Чтобы обслуживать статические файлы, минимальные требуемые разрешения в иерархии папок (см. групповые разрешения) должны быть такими (используйте команду namei -l /home/admin/WebProject/site/static/hmenu.css
):
dr-xr-xr-x корневой корень /
drwxr-xr-x корень root home
drwxr-x --- admin nginx admin
drwx - x --- admin nginx WebProject
drwx - x --- admin nginx
drwx - x --- admin nginx static
-rwxr ----- admin nginx hmenu.css
-
Затем, как получить эту красивую картинку? Чтобы изменить групповое владение для dirs, мы сначала применяем sudo chown :nginx /home/admin/WebProject/site/static
, а затем повторяем команду stripping dirs с правой стороны один за другим.
-
Чтобы изменить разрешения для dirs, применим sudo chmod g+x /home/admin/WebProject/site/static
и снова разделим dirs.
-
Измените группу файлов в каталоге /static: sudo chown -R :nginx /home/admin/WebProject/site/static
-
Наконец, измените разрешения для файлов в каталоге /static: sudo chmod g+r /home/admin/WebProject/site/static/*
(Конечно, можно создать выделенную группу и изменить имя пользователя, но это заслонит повествование неважными деталями.)
Ответ 5
Установка пользователя root в nginx может быть очень опасной. Необходимость установки разрешений для всей файловой иерархии может быть громоздкой (представьте, что полный путь к папке находится в более чем 10 подпапках).
Что бы я сделал, это отразил папку, к которой вы хотите предоставить общий доступ, в /usr/share/nginx/any_folder_name с разрешениями для пользователя, настроенного в nginx (обычно www-data). Что вы можете сделать с bindfs.
В вашем случае я бы сделал:
sudo bindfs -u www-data -g www-data /root/downloads/boxes/ /usr/share/nginx/root_boxes
Он будет монтировать /root/downloads/boxes в /usr/share/nginx/root_boxes со всеми разрешениями для пользовательских www-данных. Теперь вы задаете этот путь в своем конфиге блока местоположения
location /static {
autoindex on;
alias /usr/share/nginx/root_boxes/;
}
Ответ 6
Для меня это был SElinux, мне пришлось запустить следующее: (RHEL/Centos на AWS)
sudo setsebool -P httpd_can_network_connect on
chcon -Rt httpd_sys_content_t /var/www/
Ответ 7
Попробуйте принятый ответ от @gitaarik, и если он все еще дает 403 Forbidden
или 404 Not Found
и ваша цель определения местоположения - /
, читайте дальше.
Я также столкнулся с этой проблемой, но ни одно из указанных выше разрешений не решило мою проблему. Это было решено добавлением директивы root
, потому что я определял корневое местоположение (/
) и случайно использовал директиву alias
, когда мне следовало использовать директиву root
.
Конфигурация принята, но выдает 403 Forbidden
или 404 Not Found
, если для /
включена автоматическая индексация:
location / {
alias /my/path/;
index index.html;
}
Правильное определение:
location / {
root /my/path/;
index index.html;
}