Autoindex corta o final do caminho do diretório; solução alternativa necessária

1

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!

    
por user48147 17.11.2017 / 04:20

1 resposta

0

Ao usar alias com uma expressão regular location , é necessário reconstruir todo o nome do caminho no valor alias . Consulte este documento para obter detalhes.

location ~ ^/~(?<user_home_folder>[^/]+)(?<public_html_path>/.*)?$ {
    alias /home/domain-users/$user_home_folder/public_html$public_html_path;
    autoindex on;
}

Usar try_files e alias juntos pode causar complicações devido a problema . Mas o comportamento padrão é praticamente idêntico à declaração try_files na sua pergunta.

    
por 17.11.2017 / 12:41