NGINX upstream com base no esquema $

1

Temos um upstream que pode servir tráfego HTTP e HTTPS. A questão é: como fazer o NGINX enviar tráfego para a porta correta do upstream?

A configuração atual é:

upstream  platfrom-dev-eu-app {
    server 52.***.***.80:443;
}
...
server {
...

    location / {
        proxy_redirect          off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass $scheme://platfrom-dev-eu-app$request_uri;
    }
}

A única solução que vejo aqui - é adicionar dois upstreams, um com : 80 e o segundo com : 443 , e então usar if / else no server {} para escolher o correto (ou apenas definir porta após proxy_pass ), como:

upstream  platfrom-dev-eu-app-ssl {
    server 52.***.***.80:443;
}

upstream  platfrom-dev-eu-app {
    server 52.***.***.80;
}
...
    if ($scheme = "http") {
         proxy_pass http://platfrom-dev-eu-app$request_uri;
    }

    if ($scheme = "https") {
        proxy_pass https://platfrom-dev-eu-app-ssl$request_uri;
    }

É a solução certa aqui - ou existe uma abordagem mais adequada?

    
por setevoy 22.08.2017 / 09:58

1 resposta

1

Você pode evitar a declaração if simplesmente declarando dois servidores, esse é um padrão que eu uso para esse tipo de coisa:

upstream  platfrom-dev-eu-app-ssl {
    server 52.***.***.80:443;
}

upstream  platfrom-dev-eu-app {
    server 52.***.***.80;
}

server {
  listen 80;

  include "common.conf";
  proxy_pass http://platfrom-dev-eu-app-ssl$request_uri;
}

server {
  listen 443 ssl;
  # SSL configuration

  include "common.conf";
  proxy_pass https://platfrom-dev-eu-app-ssl$request_uri;
}

Crie o arquivo common.conf e coloque sua configuração comum nos dois servidores.

Realmente, se você estiver em uma rede confiável e segura, você pode apenas terminar o SSL no proxy reverso e apenas falar em texto simples para os servidores de aplicativos. Em seguida, no servidor de aplicativos, defina um servidor em uma porta que seja para conexões SSL e defina o parâmetro fastcgi HTTPS to on .

    
por 23.08.2017 / 18:31

Tags