Как прокси часть старого сайта через новый в Apache 2.4, где старый сайт должен работать под www.domain.com / оставаться живым во время разработки?

На старом веб-сайте работает форумное программное обеспечение с глубоко встроенными URL-адресами, которые заставляют его поверить, что это www.domain.com, а его конфигурация возвращает абсолютные URL-адреса ссылок. Нам нужно запустить новый сервер, чтобы взять на себя остальную часть www.domain.com, и прокси через старый форум веб-сайта, чтобы все существующие URL сохранялись для SEO и закладок.

Фактически, мы запускаем новый сервер в тестовом режиме (с частными файлами /etc/hosts или с помощью прокси-сервера для разработчиков), поэтому "старый" сайт должен оставаться как www.domain.com на некоторое время дольше для широкой публики., но для нас прокси через новый сайт, как он будет, когда он будет запущен.

Одна небольшая справка на старом сервере, директива apache "ServerAlias ​​old.domain.com" возвращает правильную страницу из механизма форума, когда этот домен используется в запросах, но с найденным заголовком 302 с Location: http://www.domain.com/forum для каждого ответа. (Это будет типично для любого веб-сайта с именем ServerName www.domain.com ServerAlias ​​old.domain.com в apache, я думаю.)

Кроме того, кажется, что mod_rewrite не является подходом для повышения производительности, так как у нас есть 500-1000 пользователей, работающих в режиме реального времени на форуме, поэтому мы пытаемся избежать этого.

(Этот вопрос отличается от всех других вопросов о перенаправлении, которые я исследовал весь день - никакие другие вопросы не обсуждают сохранение старого сервера с помощью www.domain.com, но без указания DNS. В этой ситуации требуется, чтобы старое программное обеспечение сервера и форума сохраняло www.domain..com как его конфиг.)

1 ответ

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

Абсолютные URL-адреса в ссылках в порядке - www.domain.com в порядке, так как он указывает на новый сервер, который будет прокси-сервер любого запроса, который, конечно, на www.domain.com/forum/. Поэтому нам не нужно беспокоиться о переписывании этих URL в заголовке или в теле html. (И мы не можем просто представить old.domain.com поисковым системам или пользователям, так как это повлияет на оценку SEO и будет помечено как дублированный контент для разных URL).

С помощью:

ProxyPass /forum/ http://old.domain.com/forum/

работает хорошо, и нам даже не нужен ProxyPassReverse, так как старый сервер не возвращает old.domain.com, а www.domain.com нам.

Большой проблемой было 302 найденного местоположения: www.domain.com/forum/ header - если мы не удалим его, браузер перезагрузит этот URL, снова попадет на proxyPass и перезагрузит снова и снова, пока "слишком много перенаправлений",

Чтобы удалить это, мы используем директиву mod_headers только для этого места:

<Location "/forum/">
  Header unset location
</Location>

и это должно быть в конфиге после директивы ProxyPass. (Несмотря на то, что говорят документы, директива Header будет работать внутри).

Чтобы решить / forum без конечного слеша, мы ставим это перед ProxyPass:

Redirect "/forum" http://www.domain.com/forum/

Одна проблема остается в том, что некоторые куки-файлы или иным образом каким-либо образом искажаются, а учетные данные игнорируются / отклоняются. Например, форум может сравнивать содержимое cookie с подключением IP, но это скорее функция форума, чем проблема с этим общим решением.

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