Изменить URL в Source с обратным прокси?

Иногда мы делаем копии живых сайтов на другом сервере, чтобы протестировать новые функции. Многие системы CMS жестко кодируют URL-адрес в базе данных, поэтому невозможно просто использовать другой URL-адрес. В наших локальных системах мы просто используем файл hosts для перенаправления запросов на другой IP. Это очень сложно для наших клиентов, поэтому нам нужен более простой способ для них. Можно использовать apache (мы используем apache в качестве веб-сервера) в качестве обратного прокси-сервера, поэтому он перенаправляет dev.somedomain.com на anotherdomain.com. Осталась только одна проблема - в источнике HTML есть абсолютные ссылки на anotherdomain.com. Есть ли способ просто позволить apache (или другому программному обеспечению) заменить все ссылки на http(s)://anotherdomain.com на http(s)://dev.somedomain.com на всех страницах (+js +css)?

Производительность не является проблемой, поскольку она, очевидно, никогда не будет работать в системе, которая используется более чем несколькими людьми.

3 ответа

Решение

Спасибо за подсказку к mod_filter. Кажется, сейчас работает! У меня была проблема с тем, что сайт использует оба, URL с www. а тот без. Моя конфигурация:

    <VirtualHost *:801>
      ServerName www.dev.domain1.com

      ServerAdmin office@domain2.com

     SetEnvIf X-Forwarded-Proto https HTTPS=on

      FilterProvider gzinflate INFLATE resp=Content-Encoding $gzip
      FilterProvider replace SUBSTITUTE Content-Type $text/
      FilterProvider gzdeflate DEFLATE Content-Type $text/
      FilterChain +gzinflate +replace +gzdeflate
      Substitute "s|domain2.com|dev.domain1.com|n"


     ProxyPass / http://www.domain2.com/
     ProxyPassReverse / http://www.domain2.com/
    # ProxyHTMLEnable On
     ProxyHTMLURLMap http://www.domain2.com/ /



      ErrorLog /var/log/apache2/dev-proxy-error.log

      LogLevel warn

      CustomLog /var/log/apache2/dev-proxy-access.log combined

    </VirtualHost>

И для домена без www

    <VirtualHost *:801>
      ServerName dev.domain1.com

      ServerAdmin office@domain2.com

     SetEnvIf X-Forwarded-Proto https HTTPS=on

      FilterProvider gzinflate INFLATE resp=Content-Encoding $gzip
      FilterProvider replace SUBSTITUTE Content-Type $text/
      FilterProvider gzdeflate DEFLATE Content-Type $text/
      FilterChain +gzinflate +replace +gzdeflate
      Substitute "s|domain2.com|dev.domain1.com|n"


     ProxyPass / http://domain2.com/
     ProxyPassReverse / http://domain2.com/
    # ProxyHTMLEnable On
     ProxyHTMLURLMap http://domain2.com/ /



      ErrorLog /var/log/apache2/dev-proxy-error.log

      LogLevel warn

      CustomLog /var/log/apache2/def-proxy-access.log combined

    </VirtualHost>

Недостаточно только ProxyHTMLURLMap, поскольку он заменяет только один и тот же домен. на домене с www домен без замены не будет и наоборот.

Я надеюсь, что это помогает кому-то. С этим широким фильтром я настоятельно рекомендую не использовать его на производственной площадке!

У Apache есть модуль для этого - он называется mod_filter.

Я не совсем понимаю, что вы хотите, и моя репутация слишком низкая, чтобы добавить комментарий.

Это верно, у вас есть такая ситуация:

yourCMS.local
|
|
+ -----------> Создать копию системы = dev.yourCMS.local

На вашем "скопированном" сервере веб-сервера у вас есть такая ситуация:

Пользователь добавляет "dev.yourCMS.local" в браузер, и ваш сервер dev перенаправляет соединение на URL yourCMS.local, но на том же сервере (поиск 127.0.0.1)

Если мое понимание верно, попробуйте это решение:

  1. Добавьте запись в файл хоста (ubuntu /etc/hosts)

    # <IP-Adress>  <Hostname>
    127.0.0.1   yourCMS.local
    
  2. измените файл конфигурации сайта apache в /etc/apache2/sites-available/yoursite и добавьте:

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    
    ProxyPass / http://yourCMS.local
    ProxyPassReverse / http://yourCMS.local
    
  3. Перезапустите Apache

  4. Попытайся

Это не проверенное решение. Может быть, это не решит вашу проблему, потому что ваш добавленный URL в браузере отличается от настроенного. Я никогда не делал этого в этом направлении.

Открыто для других решений и комментариев.

Другие вопросы по тегам