reescrita do subdomínio nginx

8

Ainda outra questão de regra de reescrita nginx

Como posso reescrever de http://www.*.domain.compara http://*.domain.com?

desde já, obrigado

- Deb

EDITAR:

Sinto muito, mas não vi a formatação têxtil remover o * da minha pergunta. Eu consertei agora. O que eu preciso fazer é ir de www.joe.domain.com para joe.domain.com, onde joe pode ser qualquer palavra.

deb
fonte

Respostas:

7

Qual é o significado do período extra antes do domínio.com? O objetivo é remover o www do URL? Se assim for, isso deve fazer o truque:

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}

Não se esqueça de: sudo /etc/init.d/nginx restartcarregá-lo

Fonte: NGINX Wiki

iainlbc
fonte
Sinto muito, mas não vi a formatação têxtil remover o * da minha pergunta. O que eu preciso fazer é ir de www.joe.domain.com para joe.domain.com, onde joe pode ser qualquer palavra. No que você está certo, eu só preciso remover o www.
deb
12

Isso é um pouco complicado.

A maneira mais rápida em termos de desempenho seria

server {
  server_name www.domain.com;
  rewrite ^ http://domain.com$request_uri permanent;
}

Você salva uma correspondência de regex e duas capturas, além de obter a vantagem do nginx usando tabelas de hash para procurar o bloco do servidor correspondente.

Além disso, você não precisa reiniciar o nginx - basta recarregar, e quem deseja ter mais tempo de inatividade do que o necessário?

Martin Fjordvald
fonte
O +1 faz sentido ...
felicidades
1
Isso não é um hack. O Nginx faz uma pesquisa muito rápida através dos nomes dos servidores, portanto essa é realmente a abordagem mais rápida.
Alexander Azarov
1
@ Alaz Isso foi em resposta à resposta fornecida por iainlbc, eu quis dizer que a condição if era um hack, não o servidor que eu recomendava.
Martin Fjordvald
1

A solução de Martin F é ótima, até que você tenha centenas de domínios. Eu, no entanto, sugeriria ir para o outro lado - servir o aplicativo em www.joe.domain.com e redirecionar a partir de joe.domain.com. Tenho certeza que está em um RFC.

Justin Alan Ryan
fonte
Se você tem o nginx manipular muitos domínios, escreva um script para gerar a configuração. É uma linguagem de configuração bastante direta e você realmente não deseja fazer a análise de expressões regulares em cada carregamento de página em um servidor de alto tráfego.
Martin Fjordvald
Em princípio, talvez, mas você definiu o perfil? Eu tive alguns sites de carga muito alta usando regex para todas as solicitações. Ciao. Além disso, muitos ambientes de hospedagem compartilhada não têm sérias preocupações de desempenho, mas têm preocupações de sobrecarga de gerenciamento. Ambas as soluções podem funcionar bem em diferentes parâmetros.
Justin Alan Ryan
Se você tem centenas de domínios, o uso de expressões regulares em server_name: stackoverflow.com/questions/2498712/nginx-subdomain-rewrite
Alexander Azarov