Я пытаюсь создать своего рода общий хостинг с nginx, где у каждого пользователя есть public_html
каталог. Запросы к /~username
имеют псевдоним /home/domain-users/username/public_html
. Проблема в том, что я также хочу, чтобы автоиндексирование было включено. С приведенной ниже конфигурацией, добавленной в блок сервера, запросы к определенным файлам, например /~username/test.txt
работают нормально; они связаны с /home/domain-users/username/public_html/test.txt
. Однако при попытке запросить /~username
или ~/username/
, Я получаю 404 и /var/log/nginx/error.log
показывает, что автоиндекс по какой-то причине пытается перечислить файлы в /home/domain-users/username/public_htm
(обратите внимание на отсутствующую букву "l": путь усечен.)
Поскольку возможность получить доступ /~username
без косой черты в конце, поскольку каталог не важен, я попытался удалить $public_html_path/
из try_files
директива. Тогда даже при запросе /~username/
, автоиндекс не вызывается. Возможно, в try_files
для работы автоиндекса.
# For requests to "/~username" without a trailing slash
set $public_html_path "";
# Lazy quantifier at the end allows processing requests to "~/username". We add the trailing slash later in try_files
location ~ ^\/\~(?<user_home_folder>[^\\n\/]+)(?<public_html_path>\/.*)?$ {
alias /home/domain-users/$user_home_folder/public_html;
autoindex on;
try_files $public_html_path $public_html_path/ =404;
}
Мои исследования дали скудные результаты, самое близкое из них - этот вопрос StackOverflow. Поскольку это, похоже, ошибка в NGINX, которую вряд ли можно исправить (последний комментарий был более года назад), я ищу обходной путь. Используя root
директива вместо alias
было бы идеально, за исключением того, что автоиндекс удаляет критические /~username/
часть URI, полагая, что файлы, которые он перечисляет, находятся в корневом веб-каталоге, поскольку в некотором смысле они есть. Мы будем очень благодарны даже за хитрые обходные пути ... Спасибо!
Когда используешь alias
с регулярным выражением location
, вам необходимо восстановить полное имя пути в alias
стоимость. Видеть этот документ для подробностей.
location ~ ^/~(?<user_home_folder>[^/]+)(?<public_html_path>/.*)?$ {
alias /home/domain-users/$user_home_folder/public_html$public_html_path;
autoindex on;
}
С помощью try_files
и alias
вместе могут вызвать осложнения из-за Эта проблема. Но поведение по умолчанию практически идентично try_files
заявление в вашем вопросе.