Como passar a conexão do nginx para outro servidor (proxy reverso?)

1

Eu tenho um daemon Openfire sendo executado em http://192.168.2.33:9090 (sem SSL) e quero vinculá-lo por meio de proxy para o nome do host https://openfire.example.com (tenho certificado SSL para isso).

Como eu faria isso? Quando eu adiciono a string SSL ao nginx config, ele mostra um erro SSL. Aqui está minha configuração atual sem suporte a SSL:

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
        listen 80;
        server_name openfire.example.com;

    location / {
            proxy_pass http://192.168.2.33:9090;
            proxy_redirect http://192.168.2.33:9090/ $scheme://$host/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_read_timeout 20d;
            auth_basic "Private Property";
            auth_basic_user_file /etc/nginx/.htpasswd;
        }
}

Esta configuração produz um gateway Bad Error 502.

Uma pequena alteração (conforme visto abaixo) leva a ERR_TOO_MANY_REDIRECTS.

server {
    listen *:80;
    listen *:443;
    server_name openfire.example.com;

    ssl                     on;
        ssl_protocols           SSLv3 TLSv1;
        ssl_certificate     /etc/letsencrypt/live/openfire.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/openfire.example.com/privkey.pem;

    location / {
        rewrite ^(.*)$ https://openfire.example.com$1 permanent;
        proxy_pass http://192.168.2.33:9090;
        proxy_redirect http://192.168.2.33:9090/ $scheme://$host/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 20d;
    }
}   
    
por Bogdan Lashkov 09.05.2017 / 13:40

1 resposta

0

Obrigado ao @Seth! Eu definitivamente encontrei uma solução.

  1. Você deve ter um certificado SSL definido no console da Web no seu servidor openfire.
  2. Este certificado deve ser definido no seguinte nginx conf:

    server {
        listen *:80;
        server_name openfire.example.com;
        proxy_set_header Host openfire.example.com;
        location / {
        rewrite ^(.*)$ https://openfire.example.com$1 permanent;
        }
    }
    
    server {
        listen *:443;
        server_name openfire.example.com;
        proxy_set_header Host openfire.example.com;
    
        #The port used for secured Admin Console access:
        set $openfire_port 9091;
        #IP address for machine running openfire server:
        set $openfire_ip 192.168.2.33;
        ssl     on;
        ssl_protocols     SSLv3 TLSv1;
        ssl_certificate     /etc/letsencrypt/live/openfire.example.com/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/openfire.example.com/privkey.pem;
    
    location / {
        proxy_pass https://$openfire_ip:$openfire_port;
        }
    }
    
por 09.05.2017 / 15:42

Tags