Uma das serventias do proxy Apache é poder redirecionar as requisições feitas a um subdomínio para um servidor rodando em um porto diferente ou em um endereço diferente ou uma mistura de ambos.
Assim sendo, uma solicitação a db.exemplo.com poderia ser redirecionada para o porto 27017 localizada no mesmo servidor por meio dos seguintes passos:
Verifique que haja uma linha habilitada a carregar a configuração de um arquivo que ainda iremos criar. Esse arquivo o chamaremos de db.exemplo.com.conf.
vi /usr/local/apache2/conf/httpd.conf
Procure por onde estejam os “Include” ou vá até o final do arquivo e adicione a seguinte linha:
Include conf/extra/db.exemplo.com.conf
Salve httpd.conf e edite db.exemplo.com.conf com o seguinte conteúdo:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName db.exemplo.com
ProxyPass / http://localhost:27017
ProxyPassReverse / http://localhost:27017
</VirtualHost>
Caso o módulo proxy do apache não esteja habilitado ainda, os seguintes passos resolvem essa situação:
sudo a2enmod proxy sudo a2enmod proxy_http
E finalmente, reinicie o Apache2 para ativar a configuração:
sudo service apache2 restart
Isso feito, uma chamada a db.exemplo.com ira a ser atendido pelo servidor que estiver ouvindo no porto 27017 do localhost.
Obviamente que redirecionar para um outro servidor, apenas requer indicar o nome ou IP de dito servidor.
Redirecionando para um servidor Secundário SSL
Porém, pode ser que seja necessário repassar certa informação para um servidor secundário também Apache2. Por exemplo, como quando o servidor primário desvia o atendente a um outro servidor e este outro servidor precisa saber qual o dominio utilizado na requisição original.
Nesse caso, se faz necessário uma solução um pouco mais complexa com a mostrada a seguir em que todas as requisições que chegam a comercio.exemplo.com serão atendidas por srv2.exemplo.com:
<VirtualHost 127.0.0.1:80 _default_:80>
ServerName comercio.exemplo.com
Redirect / https://comercio.exemplo.com
</VirtualHost>
<VirtualHost 127.0.0.1:443 _default_:443>
ServerName comercio.exemplo.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://srv2.exemplo.com:80/
ProxyPassReverse / http://srv2.exemplo.com:80/
<Location />
Order allow,deny
Allow from all
</Location>
SSLCertificateFile %(SSLCertificateFile)
SSLCertificateKeyFile %(SSLCertificateKeyFile)
SSLProtocol -ALL +TLSv1.2
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
SSLCompression off
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto: \"https\"
RequestHeader set X-Forwarded-Port: 443
Header always set Strict-Transport-Security \"max-age=63072000;\"
Header set X-Content-Type-Options \"nosniff\"
Header always append X-Frame-Options \"SAMEORIGIN\"
Header set Cache-Control \"no-cache, no-store, no-transform\"
Header set Pragma \"no-cache\"
Header set X-XSS-Protection \"1; mode=block\"
Header set Referrer-Policy: \"strict-origin-when-cross-origin\"
Header set Content-Security-Policy: \"default-src https: data: 'self' 'unsafe-inline' 'unsafe-eval';\"
Header set Feature-Policy: \"fullscreen 'self'\"
Header set x-permitted-cross-domain-policies \"none\"
FileETag None
</VirtualHost>