Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Ajustes chamado FFDN-7926.


Índice

Índice
maxLevel4
outlinetrue
exclude.*ndice
stylenone


Objetivo

...

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


Pré-requisitos

...

  • Possui Possuir 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 certificado digital válido;.


Recomendações

...

  • Instalar o NGINX em um servidor separado do servidor onde o Fluig está instalado.
  • Faça as alterações necessárias na topologia utilizada, para que o acesso funcione corretamente após implantar o proxy reverso. Para saber mais sobre a topologia DMZ, clique aqui.

    Painel
    borderColor#ebecf0

    Estado
    subtletrue
    titleExemplos de alterações

    : apontamento


    Apontamento de IP na rede interna, liberação de portas, alteração de endereço de acesso do Fluig (usuário wcmadmin)

     

    .


Configurando o NGINX como proxy reverso

...

com HTTPS

...

Siga o passo a passo, conforme descrito abaixo.

Deck of Cards
idnginx-settings
Card
defaulttrue
idstep1
labelPasso 1


  • Certifique-se de que a interface de configuração pública esteja preenchida com o IP do servidor (rede interna).
Para
  •  Para isso, abra o arquivo[FLUIG]/appserver/domain/configuration/host.xml, localize a tag <interface name="public"> e verifique o valor da propriedade "value":

Image Modified

Nota
titleAtenção:Importante!

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

Card
idstep2
labelPasso 2



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_
FLUIG
    • REALTIME]:[
IP
    • PORTA_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; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; add_header 'Access-Control-Allow-Origin' 'https://fluig.suaempresa.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;
Nota
titleAtenção!

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

    • !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/';
          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;
Nota
titleImportante!

Substitua "fluig.suaempresa.com" pelo endereço a partir do qual você deseja acessar o Fluig.

Informações
titleNota:

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.

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 / {
              
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
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";


true
Card
idstep7
labelPasso 7


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

    Bloco de código
    themeMidnight
collapse
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_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
  • 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; 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 / {
  • !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_
pass
  • set_header X-Forwarded-Proto $scheme;
            
http://[IP_FLUIG]:[PORTA_FLUIG]; proxy_ssl_verify off
  • proxy_set_header X-Forwarded-Server $host;
            proxy_
ssl
  • set_
ciphers
  • header 
HIGH:!aNULL:!MD5;
  • X-Forwarded-Host $host:$server_port;
            proxy_
pass_request_headers on
  • set_header Upgrade $http_upgrade;
            proxy_set_header 
Host
  • Connection 
$host
  • "upgrade";
    
            
proxy
  • client_
set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • max_body_size       
proxy_set_header X-Forwarded-Proto $scheme
  • 880m;
            
proxy
  • client_body_
set
  • buffer_
header X-Forwarded-Server $host;
  • size    256k;
    
            proxy_
set
  • buffer_
header
  • size 
X-Forwarded-Host
  •  
$host:$server_port;
  •         
proxy_set_header Upgrade $http_upgrade
  • 8k;
            proxy_
set_header Connection "upgrade";
  • buffers         
client_max_body_size
  •      8 
880m
  • 32k;
            
client
  • proxy_
body
  • busy_
buffer
  • buffers_size    
256k
  • 64k;
    
  •         proxy_
buffer
  • temp_file_write_size 
8k
  • 64k;
        
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.

  • }
    }


Card
idstep8
labelPasso 8


  • Reinicie os serviços do Fluig e do NGINX em ambos os servidores.
Nota
titleImportante!

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 Cardsinfo
titleNota:

Se não for configurado, o padrão de timeout do proxy reverso do NGINX é 60 segundos. A configuração recomendada é 300 segundos – que é o timeout padrão do TOTVS Fluig  podendo ser ajustado para mais ou para menos de acordo com a necessidade.

Deck of Cards
idnginxidnginx-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
            proxy_connect_timeout	
600
  • 300;
            proxy_send_timeout 		
600
  • 300;
            proxy_read_timeout 		
600
  • 300;
            send_timeout            
600
  • 300;


true
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
collapse
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_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
  • AES128-
SHA384:ECDHE-ECDSA-AES256-SHA384
  • GCM-SHA256:ECDHE-
RSA-AES256-SHA:ECDHE-
  • ECDSA
-AES256-SHA:DHE-RSA
  • -AES128-
SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-
  • GCM-SHA256:
DHE
  • ECDHE-RSA-AES256-
SHA256
  • GCM-SHA384:
DHE
  • ECDHE-
DSS
  • ECDSA-AES256-
SHA:DHE-RSA-AES256-SHA
  • 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
  • 300;
            proxy_send_timeout 		
600
  • 300;
            proxy_read_timeout 		
600
  • 300;
            send_timeout            
600
  • 300;
    
            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 ao invés de apenas aumentar o tempo de timeout. Se desejar, entre em contato com o seu ESN e solicite uma proposta de consultoria investigativa Fluig.


Ocultar informações no cabeçalho HTTP

...

Para prevenir vulnerabilidades, é importante que as informações não fiquem expostas no cabeçalho HTTP. Clique aqui e saiba como ocultá-las.