Назад | Перейти на главную страницу

Nginx возвращает 404 по, казалось бы, правильному пути

Я пытаюсь обслуживать статические файлы напрямую с таким блоком местоположения:

location /static/ {
    alias /opt/graphite/webapp/content/;
}

Но когда я делаю запрос на соответствие / static /, я получаю ошибку 404 и такое сообщение в журнале ошибок:

2016/09/14 09:28:47 [error] 66068#0: *4 open() "/opt/graphite/webapp/content/js/completer.js" failed (2: No such file or directory), client: my.ip.add.ress, server: server.domain, request: "GET /static/js/completer.js HTTP/1.1", host: "server.ip", referrer: "http://server.ip/composer?"

Дело в том, что путь, указанный в этом сообщении об ошибке, полностью действителен. Этот файл существует. Он не требует отказа в разрешении, поэтому это не похоже на проблему с разрешениями. Местоположение, прокси-сервер для приложения, работает нормально. Я в недоумении, и все похожие сообщения, похоже, относятся к сокетам.

Запуск nginx 1.10.1 на OpenBSD 6.0.

Разобрался в этом. Распределение nginx в OpenBSD по умолчанию - chroot в /var/www/, что запрещает доступ ко всей файловой системе за пределами этого раздела. Это можно обойти, запустив nginx напрямую с -u флаг, или добавив тот же флаг к команде в /etc/rc.d/nginx.

В качестве альтернативы, переместить все в chroot довольно просто, если вы знаете, что происходит.