Proxy reverso do Apache2 - manipulação ou URLs diferentes

1

Estou lutando com uma configuração de proxy reverso e reescrita / proxypass específica, dependendo do caminho da URL.

Szenario:

  • Proxy reverso na DMZ
  • SSL termina em proxy reverso
  • Solicitações devem ser passadas para o servidor interno via http
  • O
  • HTTP precisa ser reescrito para HTTPS
  • No html hrefs são criados como "/system/js/abc.js"

Minha configuração atual:

<VirtualHost *:80>
    ServerName media.customer.com
    RewriteEngine On
    RewriteCond %{SERVER_PORT}s ^(443(s)|[0-9]+s)$
    RewriteRule ^(.*)$ https://media.customer.com$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName media.customer.com
    DocumentRoot /var/www/customer.com/

    SSLEngine On
    SSLCertificateKeyFile /etc/apache2/certs/server.key
    SSLCertificateFile /etc/apache2/certs/server.crt

    ProxyRequests Off
    ProxyPass / http://serverName/
    ProxyPassReverse / http://serverName/

    ProxyHTMLEnable On
    ProxyHTMLURLMap http://serverName/ /
</VirtualHost>

Isso não seria um grande problema, mas precisamos seguir as regras de trabalho:

  1. Apenas a base-url "Http (s): // serverName" é roteada para o link (adicionar / system /) ao URL base
  2. Todo protocolo somente de URL mais profundo muda de http para https. Nenhuma alteração no URL.
  3. URLs http precisos precisam de alterações em https-URLs

A configuração acima funciona para:

  • [http] / serverName / system /
  • [http] / serverName / system
  • [https] / serverName / system /
  • [https] / serverName / system
  • [http] /serverName/system/img/test.gif
  • [https] /serverName/system/img/test.gif

Eu coloco "/ fotoweb /" em RewriteRule ou ProxyPass, nós temos duas strings como: link

Para minha opinião, preciso identificar se é uma base-url e, em seguida, adicionar "/ system /"; caso contrário, apenas mapeie para http. Mas não tenho ideia de como fazer isso.

Obrigado antecipadamente!

    
por user269933 11.02.2015 / 18:53

1 resposta

0

Isso reescreve tudo o que não é HTTPS para HTTPS:

RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Não tenho certeza do que você considera 'base-url', mas suponho que seja HTTPS + não começando com '/sistema'. Isto reescreve tudo o que não começa com '/ system' para '/ system /...':

RewriteCond %{REQUEST_URI} ! ^/system
RewriteRule .* /system%{REQUEST_URI} [R=301,L]

Se for apenas '/', então:

RewriteCond %{REQUEST_URI} ^/$
RewriteRule .* /system/ [R=301,L]

Tudo em um:

<VirtualHost *:80>
    ServerName media.customer.com
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName media.customer.com

    RewriteEngine on
    RewriteCond %{REQUEST_URI} ! ^/system
    RewriteRule .* /system%{REQUEST_URI} [R=301,L]

    DocumentRoot /var/www/customer.com/

    SSLEngine On
    SSLCertificateKeyFile /etc/apache2/certs/server.key
    SSLCertificateFile /etc/apache2/certs/server.crt

    ProxyRequests Off
    ProxyPass / http://serverName/
    ProxyPassReverse / http://serverName/

    ProxyHTMLEnable On
    ProxyHTMLURLMap http://serverName/ /
</VirtualHost>
    
por 11.02.2015 / 19:34