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

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

иногда мы делаем копии действующих сайтов на другом сервере для тестирования новых функций. Многие системы 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)?

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

Спасибо за подсказку для 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
|
|
+ -----------> Создать копию System = dev.yourCMS.local

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

Пользователь добавляет "dev.yourCMS.local" в браузер, и ваш сервер разработки перенаправляет соединение на 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-адрес в браузере отличается от настроенного. Я никогда не делал этого в этом направлении.

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