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

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 запрещено для всех файлов

4b9b3361

Ответ 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;
}