Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

O objetivo deste guia é detalhar as configurações necessárias para utilização de proxy reverso NGINX com protocolo HTTPS.

Pré-requisitos

  • Possui o NGINX na versão 1.20.1 ou superior instalado. Detalhes de instalação e configuração do NGINX estão disponíveis na documentação oficial.
  • Possuir um host no DNS configurado para a plataforma, com domínio específico.
  • Possuir um certificado digital válido;

...

Deck of Cards
idnginx-settings
Card
defaulttrue
idstep1
labelPasso 1

Certifique-se que a interface de configuração pública esteja preenchida com o IP do servidor (rede interna).

Para isso, abra o arquivo[FLUIG]/appserver/domain/configuration/host.xml, localize a tag <interface name="public"> e verifique o valor da propriedade "value":

Nota
titleAtenção:

Não é recomendada a utilização do valor "0.0.0.0" na interface de configuração pública.

Card
idstep2
labelPasso 2

Configure o Fluig em HTTPS na plataforma NGINX conforme documentação disponível em Configuração HTTPS da plataforma.

Card
idstep3
labelPasso 3

No servidor NGINX, utilize os certificados e o arquivo gerado para realizar a seguinte configuração:

  • Salve os certificados na pasta /etc/nginx/certs
  • Cole o arquivo de configuração gerado no Passo 2 em /etc/nginx/conf.d
Card
idstep4
labelPasso 4

Adicione as diretivas para configuração das notificações em tempo real (serviço Realtime) no arquivo gerado no Passo 3 - "/etc/nginx/conf.d":

  • Informe o DNS do servidor na diretiva "server_name"
  • Informe o caminho completo dos arquivos de certificado (arquivo .cert) na diretiva ssl_certificate
  • Informe o caminho completo dos arquivos de certificado (arquivo .key) na diretiva ssl_certificate_key
  • Informe o IP e a porta onde o serviço do Realtime está em execução, na diretiva "proxy-pass". A porta padrão do Realtime é 7777, caso não tenha sido alterada


Bloco de código
themeMidnight
server {
    listen 7777 ssl;
    server_name fluig.suaempresa.com;
    ssl_certificate     /etc/nginx/certs/fluig.cert;
    ssl_certificate_key /etc/nginx/certs/fluig.key;
    
    location / {
    	proxy_pass http://[IP_FLUIGREALTIME]:[IPPORTA_REALTIME];
    	proxy_http_version 1.1;
    	proxy_set_header Host $host;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection "upgrade";
    }
}
Card
idstep5
labelPasso 5

No arquivo "/etc/nginx/conf.d", no contexto "server", que estará ouvindo a porta 443, configure as seguintes diretivas:

  • Informe o caminho completo dos arquivos de certificado (arquivo .cert) na diretiva ssl_certificate;
  • Informe o caminho completo dos arquivos de certificado (arquivo .key) na diretiva ssl_certificate_key;
  • Oculte a versão do NGINX no cabeçalho de resposta das requisições, informando o valor "off" na diretiva "server_tokens"
  • Adicione as diretivas de cabeçalho ("add_header") conforme abaixo:



Bloco de código
languagebash
themeMidnight
server {
    listen 443 ssl http2;
    server_name fluig.suaempresa.com;
    server_tokens off;
    
    ssl_certificate     /etc/nginx/certs/fluig.cert;
    ssl_certificate_key /etc/nginx/certs/fluig.key;
    ssl_protocols       TLSv1.
2 TLSv1.
3;
    ssl_ciphers         ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:
DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; # Se necessário complemente com outras chaves Ciphers suportadas
    ssl_prefer_server_ciphers on;
    ssl_session_cache   shared:SSL:10m;
    
    add_header 'Access-Control-Allow-Origin' 'https://fluig.suaempresa.com/';
    
ssl_prefer_server_ciphers on
add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, OPTIONS, DELETE';
    
ssl
add_
session_cache shared:SSL:10m;
header 'Access-Control-Request-Method' 'GET, PUT, POST, OPTIONS, DELETE';
    add_header 'Access-Control-Allow-
Origin
Headers' '
https://fluig.empresa.com/'; add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, OPTIONS, DELETE
Content-Type, X-Requested-With, accept-version';
    add_header 
'Access
Strict-
Control-Request-Method' 'GET, PUT, POST, OPTIONS, DELETE'; add_header 'Access-Control-Allow-Headers' 'Content-Type, X-Requested-With, accept-version'; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Nota
titleAtenção!

Substitua "fluig.suaempresa.com" pelo endereço que você deseja acessar o Fluig

Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Nota
titleAtenção!

Substitua "fluig.suaempresa.com" pelo endereço que você deseja acessar o Fluig.

Nota

Recomendamos o uso de chaves e protocolos mais modernos e seguros como os indicados no exemplo.

Porém, outras chaves também são suportadas:

DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA

Preencha a diretiva ssl_ciphers do conf.d substituindo pelos valores suportados acima que estejam de acordo com sua política de segurança. As chaves podem ser validadas em https://ciphersuite.info/.


E também os protocolos: TLSv1, TLSv1.1 e TLSv1.2

Preencha a diretiva ssl_protocols do conf.d substituindo pelos valores suportados acima que estejam de acordo com sua política de segurança.

Card
idstep6
labelPasso 6

No contexto "server" que estará ouvindo a porta 443, adicione as seguintes diretivas no contexto "location /", no arquivo "/etc/nginx/conf.d", conforme abaixo:

  • Na diretiva "proxy-pass", informe o IP do servidor do Fluig e a porta definida na instalação da plataforma (a porta padrão é 8080)
  • Adicione as diretivas de cabeçalho para "proxy" conforme abaixo:


Bloco de código
themeMidnight
    location / {
Card
idstep6
labelPasso 6

No contexto "server" que estará ouvindo a porta 443, adicione as seguintes diretivas no contexto "location /", no arquivo "/etc/nginx/conf.d", conforme abaixo:

  • Na diretiva "proxy-pass", informe o IP do servidor do Fluig e a porta definida na instalação da plataforma (a porta padrão é 8080)
  • Adicione as diretivas de cabeçalho para "proxy" conforme abaixo:
Bloco de código
themeMidnight
    location / {
        proxy_pass          http://[IP_FLUIG]:[PORTA_FLUIG];
        proxy_ssl_verify    off;
        proxy_ssl_ciphers   HIGH:!aNULL:!MD5;

        proxy_pass_request_headers on;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Server $host;
pass          proxy_set_header X-Forwarded-Host $host:$server_porthttp://[IP_FLUIG]:[PORTA_FLUIG];
        proxy_setssl_headerverify   Upgrade $http_upgradeoff;
        proxy_setssl_headerciphers  Connection "upgrade";
Card
idstep7
labelPasso 7

Após efetuar os passos anteriores, o arquivo "/etc/nginx/conf.d" estará desta forma:

Bloco de código
themeMidnight
server { HIGH:!aNULL:!MD5;

        proxy_pass_request_headers on;
    listen 7777 ssl;
  proxy_set_header  server_name fluig.suaempresa.comHost $host;
    ssl_certificate     /etc/nginx/certs/fluig.cert;
    ssl_certificate_key /etc/nginx/certs/fluig.keyproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    location / {proxy_set_header X-Forwarded-Proto $scheme;
    	proxy_pass http://[IP_FLUIG]:7777    proxy_set_header X-Forwarded-Server $host;
    	proxy_http_version 1.1;
    	proxy_set_header X-Forwarded-Host $host:$server_port;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header Upgrade $http_upgrade;
      	  proxy_set_header Connection "upgrade";
Card
idstep7
labelPasso 7

Após efetuar os passos anteriores, o arquivo "/etc/nginx/conf.d" estará desta forma:

Bloco de código
themeMidnight
collapsetrue

    }
}

server {
    listen 4437777 ssl http2;
    server_name fluig.suaempresa.com;
    serverssl_tokenscertificate off;
    
    ssl_certificate     /etc/nginx/certs/fluig.cert;
    ssl_certificate_key /etc/nginx/certs/fluig.key;
    
    ssl_protocolslocation / {
    	proxy_pass http://[IP_FLUIG]:7777;
    TLSv1.2 TLSv1.3	proxy_http_version 1.1;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA	proxy_set_header Host $host;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection "upgrade";
    }
}

server {
    listen 443 ssl http2;
    server_name fluig.suaempresa.com;
    server_tokens off;
    
    ssl_certificate     /etc/nginx/certs/fluig.cert;
    ssl_certificate_key /etc/nginx/certs/fluig.key;
    ssl_protocols       TLSv1.3;
    ssl_ciphers 		ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; # Se necessário complemente com outras chaves Ciphers suportadas
     ssl_prefer_server_ciphers on;
    ssl_session_cache   shared:SSL:10m;
    
    add_header 'Access-Control-Allow-Origin' 'https://fluig.empresa.com/';
    add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, OPTIONS, DELETE';
    add_header 'Access-Control-Request-Method' 'GET, PUT, POST, OPTIONS, DELETE';
    add_header 'Access-Control-Allow-Headers' 'Content-Type, X-Requested-With, accept-version';
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    location / {
        proxy_pass          http://[IP_FLUIG]:[PORTA_FLUIG];
        proxy_ssl_verify    off;
        proxy_ssl_ciphers   HIGH:!aNULL:!MD5;

        proxy_pass_request_headers on;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        client_max_body_size       880m;
        client_body_buffer_size    256k;

        proxy_buffer_size          8k;
        proxy_buffers              8 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}
Card
idstep8
labelPasso 8

Reinicie os serviços do Fluig e do NGINX em ambos os servidores.

Troubleshotting

  • Erros de timeout ou conexão encerrada pelo NGINX



Nota
titleAtenção:

Dependendo do ambiente (versão, sistema operacional utilizado, etc.) algumas diretivas detalhadas nesta documentação podem estar presentes na sua instalação do Nginx também. Isso causará o erro "directive is duplicate", impossibilitando a inicialização do serviço do Nginx. Caso isso ocorra, verifique qual diretiva será mantida: dos arquivos de configuração do Nginx ou no arquivo de configuração criado com base nessa documentação.


Troubleshotting

  • Erros de timeout ou conexão encerrada pelo NGINX
Deck of Cards
idnginx-troubleshooting1
Card
defaulttrue
idt1-step1
labelPasso 1

Abra o arquivo de configuração do NGINX - /etc/nginx/conf.d - e inclua as diretivas de timeout no contexto "server" > "location /" conforme abaixo:


Bloco de código
themeMidnight
        
Deck of Cards
idnginx-troubleshooting1
Card
idt1-step1
labelPasso 1

Abra o arquivo de configuração do NGINX - /etc/nginx/conf.d - e inclua as diretivas de timeout no contexto "server" > "location /" conforme abaixo:

Bloco de código
themeMidnight
        proxy_connect_timeout	600;
        proxy_send_timeout 		600;
        proxy_read_timeout 		600;
        send_timeout            600;
Card
idt1-step2
labelPasso 2

Após incluir as diretivas de timeout, o arquivo "/etc/nginx/conf.d" estará desta forma:


Bloco de código
themeMidnight
collapsetrue
serverserver {
    listen 7777 ssl;
    server_name fluig.suaempresa.com;
    ssl_certificate     /etc/nginx/certs/fluig.cert;
    ssl_certificate_key /etc/nginx/certs/fluig.key;
    
    location / {
    	proxy_pass http://[IP_FLUIG]:7777;
    	proxy_http_version 1.1;
    	proxy_set_header Host $host;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection "upgrade";
    }
}

server {
    listen 443 ssl http2;
    server_name fluig.suaempresa.com;
    server_tokens off;
    
    ssl_certificate     /etc/nginx/certs/fluig.cert;
    ssl_certificate_key /etc/nginx/certs/fluig.key;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHAciphers 		ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; # Se necessário complemente com outras chaves Ciphers suportadas
    ssl_prefer_server_ciphers on;
    ssl_session_cache   shared:SSL:10m;
    
    add_header 'Access-Control-Allow-Origin' 'https://fluig.empresa.com/';
    add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, OPTIONS, DELETE';
    add_header 'Access-Control-Request-Method' 'GET, PUT, POST, OPTIONS, DELETE';
    add_header 'Access-Control-Allow-Headers' 'Content-Type, X-Requested-With, accept-version';
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    location / {
        proxy_pass          http://[IP_FLUIG]:[PORTA_FLUIG];
        proxy_ssl_verify    off;
        proxy_ssl_ciphers   HIGH:!aNULL:!MD5;

        proxy_pass_request_headers on;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        client_max_body_size       880m;
        client_body_buffer_size    256k;

        proxy_connect_timeout	600;
        proxy_send_timeout 		600;
        proxy_read_timeout 		600;
        send_timeout                600;

        proxy_buffer_size          8k;
        proxy_buffers              8 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}
Card
idt1-step3
labelPasso 3

Reinicie os serviços NGINX para aplicar a alteração realizada.


Nota
titleAtenção:

Caso o problema de timeout persista após aplicar a configuração acima, é necessário avaliar o que está ocorrendo invés de aumentar o tempo de timeout. Se desejar, entre em contato com o seu ESN e solicite uma proposta de consultoria investigativa Fluig.