Como configurar o nginx para servir virtualhost nomeado único, além do apache

1

Atualmente, tenho um único servidor apache com vários virtualhosts nomeados definidos, todos servindo no mesmo IP, na porta 80.

No entanto, tenho um virtualhost estático (um domínio específico) que desejo veicular com o nginx. Isso é possível sem que eu precise configurar o nginx para encaminhar todas as solicitações para os outros hosts virtuais?

Eu realmente quero evitar que eu precise listar cada virtualhost em apache e nginx, é uma receita para erros de configuração ...

    
por Steven De Groote 01.02.2012 / 21:03

2 respostas

2

Você só pode ter uma coisa escutando naquele IP, porta 80. Então, você usará o nginx ou o apache diretamente na porta 80. O que for, depende de você.

Se você estiver usando o nginx na frente, precisará do Apache para ouvir alguma outra porta e, em seguida, fazer proxy dos outros hosts virtuais para esse Apache. E, claro, se você tiver o Apache na frente, você precisará fazer proxy desse domínio para o seu nginx (que estará ouvindo alguma outra porta).

Qual método é mais fácil depende da sua configuração, apesar de eu achar que o nginx na frente pode ter vantagem sobre isso.

Atualização:

No nginx, a correspondência de host virtual é da mais específica para a menor, portanto, se você tiver dois blocos de host virtual, onde você especifica seu domínio específico e toda a configuração relacionada, e o outro apenas correspondente na porta 80 sem um servername definido, você deve ser capaz de lidar com o seu cenário. Se for uma solicitação em seu domínio específico, você deve corresponder a essa configuração. Se o pedido estiver em algum outro domínio, ele deve corresponder ao host virtual padrão, que você deve definir como proxy para o Apache.

    
por 01.02.2012 / 21:32
0

Para adicionar ao que o cjc já mencionou ...

Por favor, lembre-se que o Apache tem o módulo rpaf instalado e configurado corretamente para obter o IP real do nginx.

Aqui está como configurar os hosts virtuais nginx para o cenário que você mencionou ...

http {
  server {
    server_name www.staticdomain.com;
    # access_log, error_log directives

    root /var/www/domain1.com/htdocs;
    index index.html;
  }

  server {
    server_name _; # default catch_all directive
    proxy_pass http://127.0.0.1:81; # please change port and IP to suit yours
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        Host            $host;
    proxy_redirect          off;
  }
}

No seu arquivo de configuração do apache ...

# Please change this according to what you set in nginx configuration above
Listen 127.0.0.1:81
LoadModule rpaf_module /path/to/mod_rpaf.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP

Obrigado.

    
por 02.02.2012 / 06:08