Я пытаюсь настроить nginx так, чтобы определенный URL-адрес создавал индекс каталога определенного каталога на моем сервере. В настоящее время так выглядит мой default.conf.
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /files/ {
root /home/myfiles/Downloads;
autoindex on;
}
Однако, когда я пытаюсь перейти на mysite.com/files/ или mysite.com/files, я получаю ошибку 403 Forbidden.
Заглянув в журнал ошибок, я увидел
2012/01/08 16:23:18 [error] 17619#0: *1 "/home/myfiles/Downloads/files/index.html" is forbidden (13: Permission denied), client: some.ip.addr.ess, server: _, request: "GET /files/ HTTP/1.1",
Я не хочу, чтобы он искал файлы / index.html, мне нужен только индекс каталога загрузок. Что мне нужно изменить, чтобы все работало так?
В этом случае вам нужно использовать alias
директива вместо root
.
Когда используешь root
, просьба к mysite.com/files/
будет искать в локальном каталоге /home/myfiles/Downloads/files/
для индексного файла, и если он не найден, автоматически сгенерирует список каталогов (поскольку вы указали autoindex
вариант). Обратите внимание, как nginx добавляет /files/
в указанный вами корневой каталог.
Поскольку для вашего случая вы хотите /files/
чтобы быть синонимом вашего каталога загрузок, вам необходимо использовать alias /home/myfiles/Downloads/
в блоке локации. Тогда любой запрос к mysite.com/files/
будет переведен в каталог /home/myfiles/Downloads/
(например. mysite.com/files/bigfile.gz
станет /home/myfiles/Downloads/bigfile.gz
). Обратите внимание, что конечный /
на псевдониме надо.
См. Документацию http://wiki.nginx.org/HttpCoreModule#alias для более подробной информации о псевдониме.
Проверьте, есть ли у Nginx выполнять разрешения для всех каталогов в родительском дереве каталогов. В вашем случае Nginx должен иметь разрешения на выполнение для /
, /home
, /home/myfiles
, /home/myfiles/Downloads
иначе Nginx не сможет выполнить chdir в эти каталоги.
Простой способ проверить это - запустить namei -l /home/myfiles/Downloads
.
привет, у меня тоже есть ошибка автоиндекса. Кстати: Я устанавливаю nginx, используя стороннее репо.
/opt/tengine/sbin/nginx -V 2>&1 | grep auto
[root@sec002 tengine]# /opt/tengine/sbin/nginx -V 2>&1 | grep auto
ngx_http_autoindex_module (static)
server {
listen 8082;
server_name sec002.xxx.com;
root /tmp;
autoindex on;
location / {
root /tmp/php/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
в браузере sec002.xxx.com:8082, ошибка ниже:
2016/01/07 16:09:26 [error] 4205#0: *1 "/tmp/php/index.html" is not found (2: No such file or directory), client: 192.168.2.13, server: sec002.xxx.com, request: "GET / HTTP/1.1", host: "sec002.xxx.com:8082"
Я гарантирую выполнить разрешение и пользователь nginx правы, это странно
Наконец, я сдаюсь и перестраиваю nginx с помощью пакета tar по умолчанию. тогда это работал
Согласно документация nginx:
«Запрос достигает модуля ngx_http_autoindex_module, только если модуль ngx_http_index_module не нашел индексный файл».
Если index
не определен для местоположения, по умолчанию используются следующие значения: index index.html
.
Удалите index.html из /home/myfiles/Downloads/files/
и он должен отображать файлы в списке каталогов