nginx: nomes de arquivos longos na listagem de diretórios

8

Usando o nginx / 1.4.1 com o OpenBSD 5.4, 64 bits:

insira a descrição da imagem aqui

Como podemos definir o nginx para mostrar o nome completo do arquivo (ou pelo menos mostrar mais do nome do arquivo que o padrão) ao usar a listagem de diretórios?

Pesquisar no Google apenas me deu o seguinte:

http://forum.nginx.org/read.php?2,124400,167420#msg-167420
January 18, 2011 08:36PM
fagtron
I looked all over the net and wasn't able to find this answer anyway, so I looked into the nginx source files and it's very easy.

Simply modify the file located at [b]src/http/modules/ngx_http_autoindex_module.c[/b] and then compile.

Change these lines:

[b]#define NGX_HTTP_AUTOINDEX_PREALLOCATE 50

#define NGX_HTTP_AUTOINDEX_NAME_LEN 50[/b]

to whatever you want, such as:

[b]#define NGX_HTTP_AUTOINDEX_PREALLOCATE 100

#define NGX_HTTP_AUTOINDEX_NAME_LEN 100[/b]

And then compile and restart nginx. That's it !!!

Pergunta : não existe outra maneira de recomplicá-lo?

evacristina
fonte
aqui é um manual, como modificar a fonte nginx: tecklyfe.com/nginx-display-full-filename-directory-listing
rubo77

Respostas:

5

De acordo com a documentação ngx_http_autoindex_module , a configuração da largura da coluna para páginas indexadas automaticamente não está disponível. Compilar a partir da fonte seria a única maneira de fazer essa alteração.

Uma alternativa poderia ser a de usar uma linguagem de script (por exemplo php, rubyou python) para realizar a listagem de diretório para você.

Os benefícios incluem:

  • totalmente personalizável via CSS, JavaScript, etc
  • controle fino sobre a listagem de arquivos

Ressalvas:

  • requer um CGI, por exemplo, php-fpmoupassenger
  • requer mais configuração
ssh2ksh
fonte
1
compilação fez o truque
evachristine
existe uma resposta com os parâmetros que devem ser alterados para a compilação - serverfault.com/questions/310532/…
Sysanin
5

Você pode tentar o módulo fancyindex com seu parâmetro fancyindex_name_length para configurar o comprimento do nome do arquivo.

Jack Rowe
fonte
1
essa deve ser a resposta aceita. observe que isso fancyindex_name_lengthnão é mencionado na página nginx, mas na página github do módulo. note que este módulo está incluído no nginx-extraspacote.
W00t
1

Como não parece haver maneira de conseguir isso, compilar o nginx a partir da fonte, isso seria uma solução alternativa :

Você pode criar automaticamente um arquivo index.html na pasta atual, que contém todo o caminho, com este script:

#!/bin/bash
# scriptname: /usr/local/sbin/directory-long-index.sh
# 
# the directory_root without slash at the end:
WEB=/var/www/
#reacheable url from inside the server:
URL=http://localhost

P=$(pwd|sed "s|$WEB/||")
echo "download $URL/$P/ to index.html"
curl "$URL/$P/" -o index.html
sed -i 's|href="\(.*\)".*</a>|style="display:inline-block;min-width:500px" href="\1">\1</a>|' index.html

dentro da pasta, basta chamar:

source /usr/local/sbin/directory-long-index.sh

fonte: https://gist.github.com/rubo77/c7a9434eb104c00bf8772b2278284360


Outra solução alternativa seria criar uma lista de diretórios simples do zero com

for i in *; do echo '<a href="'$i'">'$i'</a><br>'>>index.html; done
rubo77
fonte
Isso nem está remotamente relacionado à pergunta do usuário.
pgoetz
Claro que é. É uma solução alternativa você pode usar se você não quiser compilar nginx da fonte
rubo77
Me desculpe por isso; na primeira leitura, não consegui perceber que isso é uma etapa a priori a ser executada no servidor. É claro que isso sobrecarregará sua estrutura de diretórios com arquivos index.html e precisará ser reexecutado sempre que o sistema de arquivos subjacente for alterado, mas você está correto.
precisa saber é
0

Tente isso,

autoindex on;
autoindex_format json; # <- configure like this, your will get full name, FORMAT IN JSON

Documento do módulo ngx_http_autoindex_module

alswl
fonte