Como faço para definir um host padrão para o nginx?

11

Estou tentando descobrir como definir um host padrão para minha instalação do nginx. Encontrei este artigo no nginx Wiki:

http://wiki.nginx.org/NginxVirtualHostExample#A_Default_Catchall_Virtual_Host

Infelizmente, isso não funciona. Depois de reiniciar, recebo o seguinte:

Restarting nginx: nginx: [emerg] unknown directive "http" in /etc/nginx/sites-enabled/catchall:1
nginx: configuration file /etc/nginx/nginx.conf test failed

Depois de remover a diretiva http, recebo o seguinte:

Restarting nginx: nginx: [emerg] unknown log format "main" in /etc/nginx/sites-enabled/catchall:7
nginx: configuration file /etc/nginx/nginx.conf test failed

Estou no Ubuntu 10.04.3, onde estou usando o PPA oficial do nginx. A versão 1.0.9 do nginx está em execução.

Ulf Klose
fonte

Respostas:

16

As configurações do Nginx são baseadas em uma série de blocos aninhados. Deve haver apenas um bloco http. Isso geralmente é definido em /etc/nginx/nginx.conf - todos os arquivos incluídos (por exemplo, nos sites disponíveis) estão incluídos neste bloco http. Para configurar um host padrão / catch-all, você só precisa da seção de bloqueio do servidor para o host padrão. Isso é feito adicionando 'padrão' à diretiva de escuta. Além disso, é comum usar um server_name que não corresponda a nenhum nome real - normalmente um sublinhado ("_"), mas outros caracteres também são aceitáveis. Se você omitir o parâmetro padrão, o primeiro bloco do servidor será tratado como o padrão. (Consulte o guia do nginx para server_names para obter mais informações)

A configuração padrão ('original' neste contexto) do nginx pode incluir um bloco de servidor padrão (catch-all) no nginx.conf que você pode configurar.

Quanto ao segundo erro, verifique se 'main' está definido no nginx.conf (uma linha deve começar com 'log_format main ...' (e, é claro, verifique seus parênteses). Você pode omitir completamente a linha 'access_log' se você não deseja que as solicitações para o servidor padrão sejam registradas (ou pode alterar o formato definindo um novo formato).

cyberx86
fonte
Isso foi rápido. Obrigado. Vou tentar isso amanhã depois de dormir um pouco ;-).
Ulf Klose
Usando _ como o nome_do_servidor não é adicionado ao "padrão" do servidor {}, é comumente usado para impedir que a catchall entre em conflito com outros blocos do servidor, para que não haja 'substituição' do sinalizador padrão na diretiva de escuta. É a única coisa que marca explicitamente o servidor como padrão. Ainda assim, +1
kolbyjack 11/11
@kolbyjack - Obrigado pela correção - vou corrigi-la na minha resposta.
cyberx86
-1

Tente isso. Substitua return 404por qualquer ação padrão que você desejar.

/server//a/946083/453080

ThilinaB
fonte