Proxy reverso Nginx com vários domínios ssl

1

Eu tenho problema com o Nginx quando preciso configurá-lo como proxy reverso para vários locais com base no servidor de origem, mas em uma porta.

Por exemplo, eu tenho esses servidores:

server1.domain.com

server2.domain.com

server3.domain.com

nginx.domain.com é o servidor proxy reverso Nginx

E eu preciso acessar por este esquema:

nginx.domain.com/site -> server1.domain.com/site

(https) nginx.domain.com/site2 -> (https) server2.domain.com/site2

(https) nginx.domain.com/site3 -> (https) server3.domain.com/site3

Mas agora posso acessar apenas o site2, que é o primeiro na configuração. Quando eu mudar de ordem, então está trabalhando site3. A configuração da localização em todos os servidores é ok.

Meu default.conf tenho a seguinte configuração.

server1

server {
listen 80;
server_name  server1.domain.com;
access_log  off;
error_log off;
# some locations
}

server2

server {
listen 80;
server_name  server2.domain.com;
access_log  off;
error_log off;
# some locations
}

server {
listen 443 ssl;
server_name  server2.domain.com;

include ssl/ssl.conf;
ssl     on;
ssl_certificate      ssl/server2.domain.com.crt;
ssl_certificate_key  ssl/server2.domain.com.key;    
# some locations
}

server3

server {
listen 80;
server_name  server3.domain.com;
access_log  off;
error_log off;
# some locations
}

server {
listen 443 ssl;
server_name  server3.domain.com;

ssl     on;
include ssl/ssl.conf;
ssl_certificate      ssl/server3.domain.com.crt;
ssl_certificate_key  ssl/server3.domain.com.key;
# some locations
}

Em ssl.conf tenho

ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache    shared:SSL:10m;
ssl_session_timeout  10m;

Obrigado

    
por zorbon.cz 05.11.2014 / 11:14

1 resposta

1

Você configura 3 servidores, respectivamente, atendendo solicitações endereçadas a server[123].domain.com .

Quando uma solicitação de um domínio desconhecido entra em ação, o nginx a veicula com o domínio padrão. Por padrão, o nginx usa o primeiro definido, a menos que você especifique explicitamente outro com o sinal default_server no listen diretiva de um dos seus servidores. É por isso que suas solicitações nginx.domain.com sempre serão atendidas pelo servidor padrão (primeiro).

Agora, o que você deseja é um proxy reverso. Não é o que você pediu ao nginx para fazer. Você simplesmente definiu seus servidores de backend aos quais você precisa adicionar outro servidor nginx como proxy reverso de frontend.

Para fazer isso, você precisará usar o ngx_http_proxy_module junto com o ngx_http_upstream_module .

Especificamente, você faz solicitações de proxy de um location com proxy_pass para seus servidores de back-end.

Aqui está uma configuração simples do servidor de proxy reverso que pode funcionar para você:

server {
    listen 80;
    listen 443 ssl; # Ensure your certificate is for nginx.domain.com;
    server_name nginx.domain.com;

    location /site1 {
        proxy_pass $scheme://server1.domain.com;
    }

    location /site2 {
        proxy_pass $scheme://server2.domain.com;
    }

    location /site3 {
        proxy_pass $scheme://server3.domain.com;
    }
}

Anote o uso da variável $scheme , reproduzindo o esquema usado para se conectar a o frontend com conexão ao backend.

Não tenho certeza sobre a configuração do SSL no back-end. Eu acho que você precisa usar o mesmo server_name em cada um deles e o mesmo certificado SSL que no frontend. Não sei se você pode usar certificados diferentes nos backends, cada um com um% diferente server_name e alterar os parâmetros SSL para conexões proxy -> backends com o módulo proxy.

    
por 06.11.2014 / 12:21