В который раз сталкиваюсь с проблемой настройки nginx на сервере с Fedora. Не очень удобно, когда файлы сервера находятся в /var/www/html как это предлагает по умолчанию nginx. Хочется разместить их где-нибудь «поближе», например в /www
Но в этом случае возникает ошибка связанная с тем что nginx либо не видит этих файлов, либо выдает ошибку доступа. Различные вариации с chmod и сhown не дают нужного результата. Помогает только запуск nginx от имени root. Что не очень правильно.
Как оказалось во всем виноват SELinux. Именно настройки безопастности не дают веб серверу считывать файлы вне «своей» директории.
Исправляется это простановкой правильного контекста для файлов и директорий.
Нужный контекст можно посмотреть с помощью параметра -dZ для команды ls
ls -dZ /var/www/html system_u:object_r:httpd_sys_content_t:s0 /var/www/html
httpd_sys_content_t это необходимый контекст. Установим его для «новой» папки с файлами сайта.
chcon -Rt httpd_sys_content_t /www
Вполне возможно, что аналогичная проблема возможна не только с nginx, но и с apache. И высока вероятность, что лечится она точно так же.