Ativando vários domínios em um bloco de servidor de nginx

1

Estou usando o nginx para encaminhamento de solicitações no meu servidor. Tenho dois blocos de servidor, um para o site principal e outro bloco de servidor para servir meu conteúdo estático do S3.

   server {
      listen 80;
      server_name abc.guru www.abc.guru;

       access_log  off;
       error_log off;

      location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        Host            $host;
        proxy_redirect          off;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
      }
 }

 # Server for S3  This accepts anything apart from the above two
server {
    # Listen on port 80 for all IPs associated with your machine
    listen 80 default_server;

    # Catch all other server names
    server_name _;
 }

Isso funciona para abc.guru , mas se eu inserir www.abc.guru , isso dá erro Esta página da Web tem um loop de redirecionamento . Eu me referi à documentação e ela diz que podemos adicionar vários domínios usando o espaço.

Eu tenho meu registro de DNS para www @ e @ refere-se ao endereço IP raiz.

Como posso fazer com que funcione no primeiro bloco de servidores e em qualquer outro domínio no segundo bloco de servidores?

No meu arquivo .htaccess eu tenho

 RewriteRule (.*) http://www.abc.guru/$1 [R=301,L]
 RewriteRule ^http://www.abc.guru/$1  agent.guru [L]
 RewriteRule ^http://www.abc.guru/$1  index.php [L]
    
por KillABug 26.02.2014 / 14:46

2 respostas

1

O culpado aqui é o primeiro RewriteRule na sua configuração do Apache. Ele diz ao Apache para redirecionar todas as solicitações para http://www.abc-guru.com .

Então, quando nginx envia uma solicitação para http://www.abc-guru.com . a solicitação é roteada para o Apache e a primeira RewriteRule redireciona essa solicitação para http://www.abc-guru.com , causando, assim, um loop de redirecionamento.

A melhor solução é migrar os redirecionamentos para o nginx, como o xxdesmus sugerido.

Outra opção é restringir a primeira RewriteRule a ser aplicada somente quando o cabeçalho do host HTTP for abc-guru.com com uma diretiva RewriteCond.

    
por 27.02.2014 / 11:57
0

Em vez de manipular seus redirecionamentos no seu arquivo Apache htaccess, por que não manipular esses redirecionamentos diretamente no Nginx? Raiz de encaminhamento - > www com um redirecionamento 301, e depois no bloco www server_name envia isso para seu proxy_pass (Apache)?

    
por 26.02.2014 / 18:01