Это новая установка, за которой я следил пассажир + nginx руководство. В конечном итоге это будет рельсовый сайт, но пока я пытаюсь получить статические файлы для обслуживания и не могу определить правильную комбинацию разрешений.
Я пытаюсь обслужить файл robots.txt, вот стек нами:
namei -om /var/www/c3d/current/public/robots.txt
f: /var/www/c3d/current/public/robots.txt
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxr-xr-x c3d c3d c3d
lrwxrwxrwx c3d c3d current -> /var/www/c3d/releases/20160512102658
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxr-xr-x c3d c3d c3d
drwxrwxr-x c3d c3d releases
drwxrwxr-x c3d c3d 20160512102658
drwxrwxr-x c3d c3d public
-rwxrwxr-x c3d c3d robots.txt
Вот мой конфиг nginx для сайта:
server {
listen 80;
server_name 52.xx.xx.xx;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/c3d/current/public;
}
В /etc/nginx/nginx.conf
Я устанавливаю пользователя на c3d:
user c3d c3d;
worker_processes 1;
error_log /var/log/nginx/error.log;
...
Error.log выводит это:
2016/05/12 08:06:02 [error] 5192#0: *1 open() "/var/www/c3d/current/public/robots.txt" failed
(13: Permission denied), client: 73.135.yy.yy, server: 52.xx.xx.xx,
request: "GET /robots.txt HTTP/1.1", host: "52.xx.xx.xx"
Обновите это похоже на проблему безопасности SELinux. Я вижу это в /var/log/audit/audit.log
type=AVC msg=audit(1463057724.846:14926): avc: denied { read } for pid=5192 comm="nginx" name="robots.txt" dev="xvda2" ino=444598886 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Как правильно решить эту проблему?
У вашего файла неправильный контекст безопасности.
$ ls -Z /var/www/c3d/current/public/robots.txt
unconfined_u:object_r:var_t /var/www/c3d/current/public/robots.txt
Вы должны восстановить правильный контекст безопасности.
restorecon -v /var/www/c3d/current/public/robots.txt
Возможно, вы захотите восстановить контексты безопасности для всех ваших веб-файлов.
restorecon -r -v /var/www
У вас работает modsecurity? Если это так, вам необходимо следовать директиве, действующей для рассматриваемого местоположения
proxy_force_ranges on;