Назад | Перейти на главную страницу

Обратный прокси Apache2 - другая обработка или URL-адреса

Я борюсь с конфигурацией обратного прокси-сервера и конкретной перезаписью / прокси-сервером в зависимости от URL-пути.

Сценарио:

Моя текущая конфигурация:

<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>

Это не будет большой проблемой, но нам нужно заставить работать следующие правила:

  1. Только базовый URL "Http (s): // serverName" направляется на http: // имя_сервера / система / (добавить / system /) в базовый URL
  2. Протокол каждого более глубокого URL меняется с http на https. Без изменений в URL.
  3. Абсолютные http-URL необходимо изменить на https-URL

Приведенная выше конфигурация работает для:

Помещаю ли я "/ fotoweb /" в RewriteRule или ProxyPass, мы получаем удвоенные строки, например: http: //serverName/system/system/img/test.gif

На мой взгляд, мне нужно определить, является ли это базовым URL, а затем добавить «/ system /», в противном случае просто сопоставить с http. Но понятия не имею, как это сделать.

Заранее спасибо!

Это переписывает все, что не является HTTPS, на HTTPS:

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

Не уверен, что вы считаете «базовым URL», но я предполагаю, что это HTTPS +, не начинающийся с «/ system». Это переписывает все, что не начинается с '/ system', на '/ system / ...':

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

Если это просто '/', то:

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

Все в одном:

<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>