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

Проблемы с автоиндексом nginx

Я пытаюсь настроить 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/ и он должен отображать файлы в списке каталогов