A tentativa de www reescrever o nginx no Amazon EC2 torna os URLs do meu domínio indisponíveis

1

Estou executando o nginx versão 1.1.19 e tenho diretivas de servidor configuradas para exibir páginas diferentes, dependendo se alguém acessa meu servidor com o nome de host domain.com (mostro a página principal) ou se eles acessam meu servidor com alguma coisa else (eu mostro uma página "Não há correspondências diretas, mas você ainda consegue essa página legal").

fileA

server {
       listen 80;
       server_name domain.com;
       root /home/ubuntu/http_resources/apex/public;

       location / {
           index index.html;       
       }

fileB

server {

       listen 80;
       server_name "";          #Should catch everything else.

       root /home/ubuntu/http_resources/otherwise/public;

       location / {
            index index.html;       
       }

Essas duas configurações de bloco de servidor estão em dois arquivos separados ligados simbolicamente a sites habilitados. Isso funciona como eu esperava.

  • domain.com - > Mostra a página principal
  • dummy.domain.com - > Mostra a página "Nenhuma correspondência direta ..."
  • www.domain.com - > Mostra a página "Nenhuma correspondência direta ..."

Problema

Gostaria de redirecionar www.domain.com para domain.com, mas todos os outros subdomínios ainda devem acessar a página "Nenhuma correspondência direta ...". Eu crio um arquivo contendo

fileC:

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

e configure simbolicamente o arquivo para habilitado para sites, pensando que isso corresponderá a www.domain.com e impeça que www.domain.com vá para a raiz da web do bloco de servidor no arquivo B.

Isso parece começar a redirecionar anything.domain.com para domain.com por alguns minutos e domain.com ainda parece funcionar. (Talvez devido ao cache ou algo assim). Alguns minutos depois! meu balanceador de carga do Amazon diz que domain.com/index.html não está mais ativo no servidor de aplicativos (detalhes: o balanceador de carga verifica o domínio nu do domínio.com para index.html para determinar se o tráfego deve ir para o servidor; também há é apenas um servidor de aplicativos por trás do balanceador de carga). Em seguida, o balanceador de carga interrompe o roteamento para o servidor, pois domin.com parece não estar disponível, portanto, é claro, nenhum URL relacionado a domain.com funciona em meu navegador, pois o balanceador de carga não aponta para nada.

Eu tentei executar 'wget public_ip_of_server_behind_balancer / index.html e recebi um arquivo index.html que basicamente diz

Site Closed Down
This site has been closed by the service provider.

Excluir o link simbólico para fileC e reiniciar o nginx faz com que o balanceador de carga se reconecte ao servidor de aplicativos e funcione como descrito originalmente. O que no mundo estou fazendo errado?

    
por dgh 13.08.2012 / 04:45

1 resposta

1

Não tenho experiência com o balanceador de carga da Amazon. Então, minha resposta não abordará o problema que você mencionou, mas esperamos ajudá-lo a refinar os problemas.

Para o arquivo B, de acordo com wiki Nginx no server_name , server_name "" significa que esse bloco de servidor capturará as solicitações sem o Cabeçalho "host". Então, eu recomendo usar o default_server na diretiva de escuta como esta (como mencionado aqui ) ...

http {
  index index.html;

  server {
    listen 80 default_server;
    server_name _; # This is just an invalid value which will never trigger on a real hostname.
    access_log logs/default.access.log main;

    server_name_in_redirect off;

    root  /var/www/default/htdocs;
  }
}

Para o fileC, como você está redirecionando permanentemente, eu recomendaria a diretiva retornar , em vez da diretiva return regex replacement permanent; e eu removeria o ? no final do URL também, assim ...

server {
       listen 80;
       server_name www.domain.com;
       return 301 $scheme://domain.com$request_uri;
}

Espero que isso ajude de certa forma.

    
por 13.08.2012 / 05:40