Eu tenho uma instância do nginx em execução que atende a vários sites. A primeira é uma mensagem de status no endereço IP do servidor. O segundo é um console de administração ativado admin.domain.com
. Estes funcionam muito bem. Agora, gostaria que todas as outras solicitações de domínio fossem para um único index.php
- tenho muitos domínios e subdomínios e é impraticável listá-los todos em uma configuração nginx.
Até agora, tentei definir server_name
como, *
mas falhou como um caractere curinga inválido. *.*
funciona até eu adicionar os outros blocos de servidor, então acho que há conflito com eles.
Existe uma maneira de executar um bloco de servidor pega-tudo no nginx depois que outros sites foram definidos?
NB Eu não sou um spammer, estes são sites genuínos com conteúdo útil, eles são movidos pelo mesmo CMS de um banco de dados!
Respostas:
Altere a opção de escuta para isso em seu bloco pega-tudo do servidor. (Adicionar
default_server
) isso levará todas as suas conexões não definidas (na porta especificada).se você deseja enviar tudo para index.php se o arquivo ou pasta não existir;
fonte
server_name _;
para a página de status no endereço IP, tive que especificar,server_name x.x.x.x
mas tudo bem!default_server
parece não funcionar no nginx 1.4.6, que atualmente é a versão mais recente do Ubuntu 14.04 ... Quando eu adiciono, oconfigtest
comando retorna um erro e reiniciar o servidor também não funciona. Eu tentei exatamente a mesma configuração no meu servidor com Debian jessie, que tem nginx 1.6.2, e funciona perfeitamente. Então tente outra versão se você estiver no 1.4.6 ...default_server
diretiva também define o servidor que tratará o handshake SSL para solicitações nessa porta. Portanto, se você deseja que o bloco A do servidor lide com SSL, mas que o servidor B atue como catchall para HTTPS, a solução é configurarserver_name ~^(.+)$
no servidor B.Um sublinhado simples também funciona:
Fonte: http://nginx.org/en/docs/http/server_names.html
fonte
listen 80 default_server
em sua configuração._
é apenas um nome inválido ?Isso vai funcionar:
fonte
server_name ~.
parece ser mais eficientePara mim, de alguma forma, definir default_server não estava funcionando. Eu resolvi isso por
usando a expressão regular de todos.
fonte
Apenas 1
server
diretivaDo Nginx
listen
DocsSe você tiver apenas 1
server
diretiva, que tratará de todas as solicitações, você não precisa definir nada.Múltiplo
server
DiretrizSe você quiser combinar todas as solicitações com a
server
diretiva especificada , basta adicionar odefault_server
parâmetro alisten
, o Nginx usará estaserver
diretiva como padrão.Sobre
server_name _;
Do Nginx Docs
Não importa o que
server_name
você defina, é apenas um nome de domínio inválido .fonte
Agora você pode usar a máscara:
Veja mais aqui: http://nginx.org/en/docs/http/server_names.html
fonte
Se você também deseja capturar solicitações com
Host
cabeçalho vazio (o que é permitido em HTTP / 1.0 ), você pode usar regex e vazioserver_name
:fonte