Nota:
Esta página foi revisada para considerar as configurações de server do TOTVS Fluig Plataforma a partir da atualização 1.6.
Objetivo
O objetivo deste guia é descrever os procedimentos para a configuração de proxy reverso utilizando Apache na plataforma.
Dicas
- Após a configuração do proxy reverso, não esqueça de alterar a URL de acesso ao portal nas Configurações do sistema da plataforma. Clique aqui e saiba como fazer.
- Obtenha mais informações sobre DMZ em Topologia DMZ.
- Clique aqui para ver a documentação do próprio fornecedor sobre a configuração de proxy reverso utilizando Apache no Windows.
Importante!
Salientamos que, ao utilizar um proxy reverso, uma prática de segurança recomendada para a plataforma é não expor o servidor de aplicação diretamente na Internet.
Clique aqui e veja outras boas práticas de segurança recomendadas para o seu ambiente.
Pré-requisitos
- Apache™ versão 2.4. O instalador e a documentação oficial do Apache™ podem ser encontrados em http://httpd.apache.org/.
- Se for utilizar SSL, também será necessário converter o certificado utilizado na configuração da plataforma para os formatos .cer, .key e .pem. O guia para configurar a plataforma em SSL (HTTPS) encontra-se aqui.
- Para a porta do realtime (7777) no Apache é necessário habilitar o módulo SSL em todos os vhosts que utilizarem o realtime SSLEngine On e SSLProxyEngine On.
Módulos Apache
Certifique-se de que os seguintes módulos estão sendo carregados pelo Apache:
Nota:
Na versão 2.4 do Apache no Windows, o módulo LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so não existe.
# Módulos para WebDAV LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_lock_module modules/mod_dav_lock.so # Módulos para proxy reverso LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_express_module modules/mod_proxy_express.so LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so
Se for utilizar SSL no lado DMZ, certifique-se ainda de que o seguinte módulo está sendo carregado pelo Apache:
# Módulo para HTTPS LoadModule ssl_module modules/mod_ssl.so
Configuração do Apache (sem SSL)
01. Acesse a pasta /etc/httpd/conf.d.
Nota:
O caminho da pasta pode variar, esse caminho do exemplo é de uma instalação Linux CentOS.
02. Crie um arquivo de configuração para a plataforma (chamado fluig.conf, por exemplo), com o seguinte conteúdo:
Listen 7777 Listen 21 Header set Access-Control-Allow-Origin: "http://<Nome externo do servidor>" Header set Access-Control-Allow-Headers: "Content-Type, X-Requested-With, accept-version" Header set Access-Control-Allow-Methods: "GET, PUT, OPTIONS, DELETE, POST" Header Set Access-Control-Request-Method: "GET, PUT, OPTIONS, DELETE, POST" ProxyRequests Off ProxyVia On AllowConnect 7777 AllowConnect 21
Listener HTTP
<VirtualHost *:80> ServerName <Nome externo do servidor> ProxyPreserveHost On ProxyPass / http://<IP do servidor Fluig>:<Porta do servidor Fluig>/ ProxyPassReverse / http://<Nome externo do servidor>/ </VirtualHost>
Listener do RealTime
<VirtualHost *:7777> RequestHeader set X-Forwarded-Proto https RequestHeader set Access-Control-Allow-Origin: "https://<Nome externo do servidor>" RequestHeader set X-Forwarded-Host <Nome externo do servidor>:7777 ServerName <Nome externo do servidor> SSLProxyEngine On SSLEngine On ProxyRequests Off ProxyPreserveHost On Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile <diretorio-cadeia-certificados>/cert.pem SSLCertificateKeyFile <diretorio-cadeia-certificados>/privkey.pem # allow for upgrading to websockets RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://<IP do servidor Fluig>:7777/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://<IP do servidor Fluig>:7777/$1 [P,L] ProxyPass "/" "http://<IP do servidor Fluig>:7777" ProxyPassReverse "/" "http://<IP do servidor Fluig>:7777/" ProxyPass "/" "ws://<IP do servidor Fluig>:7777/" ProxyPassReverse "/" "ws://<IP do servidor Fluig>:7777/" </VirtualHost>
Listener FTP
<VirtualHost *:21> ServerName <Nome externo do servidor> ProxyPreserveHost On ProxyPass / ftp://<IP do servidor Fluig>/ ProxyPassReverse / ftp://<IP do servidor Fluig>:21/ </VirtualHost>
Legenda
<Nome externo do servidor>: nome que aparecerá na URL do navegador, por exemplo, http://meuservidor.com.br.
<IP do servidor Fluig>: endereço IP interno do servidor onde o Fluig está rodando, por exemplo, 10.10.2.35.
Configuração do Apache (SSL) + Fluig (HTTP)
Se não for utilizado HTTPS na plataforma, deve possuir a seguinte configuração:
Header set Access-Control-Allow-Origin: "https://meuservidor.fluig.com/" Header set Access-Control-Allow-Headers: "Content-Type, X-Requested-With, accept-version" Header set Access-Control-Allow-Methods: "GET, PUT, OPTIONS, DELETE, POST" Header Set Access-Control-Request-Method: "GET, PUT, OPTIONS, DELETE, POST" <VirtualHost *:80> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost> <VirtualHost *:443> ServerName <Nome externo do servidor> RequestHeader set X-Forwarded-Host <Nome externo do servidor>:443 RequestHeader set X-Forwarded-Proto https SSLProxyEngine On SSLEngine On SSLCertificateFile <diretorio-certificado>.crt SSLCertificateKeyFile <diretorio-chave-privada>.key SSLCertificateChainFile <diretorio-cadeia-certificados>.pem ProxyPreserveHost On ProxyPass / http://<IP do servidor fluig>:<Porta do servidor Fluig>/ ProxyPassReverse / https://<Nome externo do servidor/ </VirtualHost> <VirtualHost *:21> ServerName <Nome externo do servidor> ProxyPreserveHost On ProxyPass / ftp://<IP do servidor Fluig>/ ProxyPassReverse / ftp://<IP do servidor Fluig>:21/ </VirtualHost>
Legenda
<Nome externo do servidor>: nome que aparecerá na URL do navegador, por exemplo, http://meuservidor.com.br.
<diretorio-certificado>: diretório e nome do arquivo do certificado de domínio enviado pela entidade certificadora, por exemplo: /etc/httpd/ssl/cert-dominio.crt
<diretorio-chave-privada>: diretório e nome do arquivo da chave privada, enviada pela entidade certificadora, por exemplo: /etc/httpd/ssl/chave-privada.key
<diretorio-cadeia-certificados>: diretório e nome do arquivo que contém a cadeia de certificados, por exemplo: /etc/httpd/ssl/cert-cadeia-certificados.pem
Nota:
O caminho da pasta pode variar, esse caminho do exemplo é de uma instalação Linux CentOS.
DICA: O arquivo referente à cadeia de certificados pode ser criado concatenando os certificados de domínio, intermediários e raiz. No Linux, isto pode ser feito com o comando abaixo:
cat cert-dominio.crt cert-intermediario.crt cert-raiz.crt > cert-cadeia-certificados.pem
OBS: Os certificados intermediários e raiz normalmente podem ser encontrados para download no site da entidade certificadora que você escolheu.
<IP do servidor fluig>: endereço IP interno do servidor onde o Fluig está rodando, por exemplo, 10.10.2.35.
Configuração para acessar a plataforma via mobile/OAuth
Essa configuração deve ser realizada para garantir que a requisição chega ao conector HTTP com o mesmo protocolo a partir do qual a requisição foi originada.
01. Edite o arquivo domain.xml localizado no diretório do servidor de aplicação [diretório_instalação]/appserver/domain/configuration/.
02. Localize o seguinte código:
<subsystem xmlns="urn:jboss:domain:undertow:3.1"> <buffer-cache name="default"/> <server name="default-server"> <http-listener max-post-size="1073741824" name="default" socket-binding="http"/> <!-- Alterar esta linha --> <host alias="localhost" name="default-host"><single-sign-on path="/"/><filter-ref name="gzipFilter" predicate="path-suffix['.css'] or path-suffix['.js']"/></host> </server> <servlet-container name="default" stack-trace-on-error="local-only"> <jsp-config/> <websockets/> </servlet-container> <filters><gzip name="gzipFilter"/></filters> </subsystem>
03. Na tag http-listener inclua o atributo proxy-address-forwarding com valor true, conforme mostrado abaixo:
<http-listener max-post-size="1073741824" name="default" socket-binding="http" proxy-address-forwarding="true"/>
Configuração do Apache (SSL) + Fluig (SSL)
01. Acesse a pasta /etc/httpd/conf.d.
Nota:
O caminho da pasta pode variar, esse caminho do exemplo é de uma instalação Linux CentOS.
02. Crie um arquivo de configuração para a plataforma (chamado fluig.conf, por exemplo), com o seguinte conteúdo, caso seja utilizado HTTPS também no lado do Fluig:
Header set Access-Control-Allow-Origin: "https://<Nome externo do servidor>" Header set Access-Control-Allow-Headers: "Content-Type, X-Requested-With, accept-version" Header set Access-Control-Allow-Methods: "GET, PUT, OPTIONS, DELETE, POST" Header Set Access-Control-Request-Method: "GET, PUT, OPTIONS, DELETE, POST" <VirtualHost *:443> ServerName <Nome externo do servidor> RequestHeader set X-Forwarded-Host <Nome externo do servidor>:443 RequestHeader set X-Forwarded-Proto https SSLProxyEngine On SSLEngine On SSLCertificateFile <diretorio-certificado>.crt SSLCertificateKeyFile <diretorio-chave-privada>.key SSLCertificateChainFile <diretorio-cadeia-certificados>.pem ProxyPreserveHost On ProxyPass / https://<IP do servidor Fluig>:<Porta do servidor Fluig>/ ProxyPassReverse / https://<Nome externo do servidor>/ </VirtualHost> <VirtualHost *:21> ServerName <Nome externo do servidor> ProxyPreserveHost On ProxyPass / ftp://<IP do servidor Fluig>/ ProxyPassReverse / ftp://<IP do servidor Fluig>:21/ </VirtualHost>
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.