Subdomínio para um porto TCP/IP

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>