AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1171691
Accepted
MarcPG
MarcPG
Asked: 2025-01-26 21:41:56 +0800 CST2025-01-26 21:41:56 +0800 CST 2025-01-26 21:41:56 +0800 CST

Indexação automática do Nginx somente com argumento URI específico?

  • 772

Isso é um pouco difícil de descrever. Eu basicamente quero que o nginx responda com o autoindex em vez do arquivo index.html definido, se houver ?listing=trueno URI.

Já tentei ter isso dentro do meu location / {...}, para que ele não tenha nenhum índice para mostrar:

if ($arg_listing = "true") {
    index =404;
    add_header Content-Type application/json;
    return 200;
}

Mas isso fez com que o serviço nginx não iniciasse, porque aparentemente você não pode ter indexor autoindexdentro de um bloco if. Eu sei que o bloco if funciona pelo menos, porque o 200 é retornado se eu remover o index.

Não tenho muita experiência em usar nginx, então não tenho ideia do que fazer. Aqui está a /etc/nginx/sites-enabled/defaultconfiguração completa: https://pastebin.com/iRiMpCk9

Edição: Alterei o link do Pastebin, porque antes estava errado.

nginx
  • 2 2 respostas
  • 46 Views

2 respostas

  • Voted
  1. Best Answer
    Ivan Shatsky
    2025-01-26T22:01:32+08:002025-01-26T22:01:32+08:00

    Na verdade, uma ifdiretiva nginx, quando usada em locationcontexto, tem muito pouco em comum com construções semelhantes de linguagens de programação imperativas. Uma das melhores explicações de como essa diretiva realmente funciona foi fornecida por Yichun Zhang, o autor do famoso lua-nginx-module e do pacote OpenResty . Na verdade, cada ifdiretiva cria implicitamente um local aninhado que tenta herdar todas as declarações do local pai. Existem, no entanto, certas limitações sobre quais diretivas podem ser usadas no chamado contexto " ifin location" (se puderem, será explicitamente declarado na documentação), e você acabou de encontrar uma delas (a autoindexdiretiva não pode ser usada neste contexto). A solução mais comum para tais situações é usar variáveis ​​como argumentos para essas diretivas.

    Infelizmente, nem todas as diretivas nginx permitem o uso de variáveis ​​como seus parâmetros (como regra, se isso for possível, é explicitamente declarado na documentação da diretiva correspondente). Em particular, a autoindexdiretiva não suporta especificar seu parâmetro como uma variável cujo valor pode ser onou off. Portanto, de fato, a solução envolvendo o uso de dois locais nomeados separados com configurações diferentes para esta diretiva é provavelmente a única opção possível. No entanto, como eu já disse , você não pode pular para o local nomeado via rewritediretiva. Em vez disso, você pode fazer isso via try_filesdiretiva, conforme descrito aqui :

    map $arg_listing $autoindex {
        true     @autoindex_on;
        default  @autoindex_off;
    }
    
    server {
        ... listen, server_name, root and other common "server" block parameters here
    
        location / {
            try_files "" $autoindex;
        }
        location @autoindex_on {
            autoindex on;
            autoindex_format json;
        }
        location @autoindex_off {
            return 403;
        }
    
        ... your other locations here
    }
    

    Mas tenha em mente que, para que autoindexa diretiva entre em vigor, não deve haver um arquivo de índice ( index.htmlpor padrão) no diretório do servidor web solicitado.

    • 0
  2. Hans Yulian
    2025-01-26T21:46:47+08:002025-01-26T21:46:47+08:00

    tente isto:

    server {
        listen 80;
        server_name example.com;
        root /var/www/html;
    
        # Default behavior: Serve files or the index.html
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        # Named location for autoindex
        location @listing {
            autoindex on;
            autoindex_exact_size off;  # Optional: Makes file sizes human-readable
            autoindex_localtime on;   # Optional: Displays local times for files
        }
    
        # Rewrite based on the presence of the query parameter
        location / {
            if ($arg_listing = "true") {
                rewrite ^ /@listing last;
            }
            try_files $uri $uri/ /index.html;
        }
    }
    
    • -1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve