Índice
Objetivo
O objetivo deste guia é descrever os procedimentos para a configuração de um servidor de proxy reverso em uma instalação do fluig.
Configuração de Proxy Reverso / DMZ
Um proxy reverso é um servidor que repassa o tráfego de rede recebido para um ou mais servidores. Em uma instalação do fluig este tipo de servidor é usado para habilitar uma topologia de arquitetura chamada DMZ.
A implementação da DMZ no fluig é realizada com o uso do Apache™ HTTP Server, que é um servidor Web de código livre, desenvolvido e mantido pela Apache Software Foundation.
A figura a seguir apresenta as topologias DMZ + SSL suportadas pelo fluig.
Importante
Não é possível utilizar as notificações em tempo real quando utilizado proxy reverso com HTTPS.
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 do fluig para os formatos .cer, .key e .pem. O guia para configurar o fluig em SSL (HTTPS) encontra-se aqui.
Módulos Apache
- Certifique-se que os seguintes módulos estão sendo carregados pelo Apache:
# 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 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
Na pasta /etc/httpd/conf.d (quando instalado na configuração padrão) crie um arquivo de configuração para o fluig (chamado fluig.conf, por exemplo), com o seguinte conteúdo:
- <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).
- <caminho-certificado>: caminho e nome do arquivo de certificado (por exemplo, /etc/httpd/ssl/fluig).
Listen 7777 Listen 8888 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 8888 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 Chat
<VirtualHost *:7777>
ServerName <Nome externo do servidor>
SetEnv proxy-sendchuncked
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io
RewriteCond %{QUERY_STRING} transport=websocket
RewriteRule /(.*) ws://<IP do servidor Fluig>:7777/$1
ProxyPass /socket.io http://<IP do servidor Fluig>:7777/socket.io keepalive=On
ProxyPassReverse /socket.io http://<IP do servidor Fluig>:7777/socket.io retry=0
</VirtualHost>
Listener do Realtime
<VirtualHost *:8888>
ServerName <Nome externo do servidor>
SetEnv proxy-sendchuncked
ProxyPreserveHost On
ProxyPass / http://<IP do servidor Fluig>:8888/
ProxyPassReverse / http://<IP do servidor Fluig>:8888/
</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>
Configuração do Apache (SSL) + fluig (HTTP)
Se não for utilizado HTTPS no Fluig, deve possuir a seguinte configuração:
Onde:
<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).
<caminho-certificado>: caminho e nome do arquivo de certificado (por exemplo, /etc/httpd/ssl/fluig).
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>
SSLProxyEngine On
SSLEngine On
SSLCertificateFile <caminho-certificado>.cer
SSLCertificateKeyFile <caminho-certificado>.key
SSLCertificateChainFile <caminho-certificado>.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>
Configuração do Apache (SSL) + fluig (SSL)
Na pasta /etc/httpd/conf.d (quando instalado na configuração padrão) crie um arquivo de configuração para o Fluig (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> SSLProxyEngine On SSLEngine On SSLCertificateFile <caminho-certificado>.cer SSLCertificateKeyFile <caminho-certificado>.key SSLCertificateChainFile <caminho-certificado>.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>
