Изменить 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 домен без замены не будет и наоборот.
Я надеюсь, что это помогает кому-то. С этим широким фильтром я настоятельно рекомендую не использовать его на производственной площадке!
Я не совсем понимаю, что вы хотите, и моя репутация слишком низкая, чтобы добавить комментарий.
Это верно, у вас есть такая ситуация:
yourCMS.local
|
|
+ -----------> Создать копию системы = dev.yourCMS.local
На вашем "скопированном" сервере веб-сервера у вас есть такая ситуация:
Пользователь добавляет "dev.yourCMS.local" в браузер, и ваш сервер dev перенаправляет соединение на URL yourCMS.local, но на том же сервере (поиск 127.0.0.1)
Если мое понимание верно, попробуйте это решение:
Добавьте запись в файл хоста (ubuntu /etc/hosts)
# <IP-Adress> <Hostname> 127.0.0.1 yourCMS.local
измените файл конфигурации сайта apache в /etc/apache2/sites-available/yoursite и добавьте:
<Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://yourCMS.local ProxyPassReverse / http://yourCMS.local
Перезапустите Apache
Попытайся
Это не проверенное решение. Может быть, это не решит вашу проблему, потому что ваш добавленный URL в браузере отличается от настроенного. Я никогда не делал этого в этом направлении.
Открыто для других решений и комментариев.