Estou tentando configurar uma espécie de hospedagem compartilhada com o nginx, onde cada usuário tem um diretório public_html
. Solicitações para /~username
são alias para /home/domain-users/username/public_html
. O problema é que também quero o autoindexing ativado. Com a configuração abaixo adicionada em um bloco de servidor, solicitações para arquivos específicos como /~username/test.txt
funcionam bem; eles estão com alias para /home/domain-users/username/public_html/test.txt
. No entanto, ao tentar solicitar /~username
ou ~/username/
, recebo um 404 e /var/log/nginx/error.log
revela que o índice automático está, por algum motivo, tentando listar arquivos em /home/domain-users/username/public_htm
(observe o "l" ausente: o caminho está truncado. )
Como não é possível acessar /~username
sem uma barra como um diretório, tentei remover $public_html_path/
da diretiva try_files
. Então, mesmo quando solicitando /~username/
, o autoindex não é chamado. Talvez seja necessária uma barra de acompanhamento literal em try_files
para que o índice automático funcione.
# 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;
}
Minha pesquisa gerou resultados escassos, sendo o mais próximo essa pergunta do StackOverflow . Como isso parece ser um bug no NGINX que provavelmente não será corrigido (o último comentário foi há mais de um ano), estou procurando uma solução alternativa. Usar a diretiva root
em vez de alias
seria perfeito, exceto que o autoindex remove a parte crítica /~username/
do URI, pensando que os arquivos que ela lista estão na raiz da web, pois, de certa forma, eles são. Até mesmo soluções hacky serão muito apreciadas ... Obrigado!