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

Sharepoint с обратным прокси-сервером Apache с использованием подкаталога

Наша команда новичок в Apache. У нас есть приложение SharePoint 2007, которое находится на нашем внутреннем сервере по адресу, который мы назовем http://internal.site.com.

Мы обязаны использовать Apache в качестве обратного прокси-сервера с внешнего сайта на внутренний сервер. внешний сервер находится по адресу, который мы назовем http://external.site.com/appname.

Проблема связана с относительными ссылками SharePoint. ссылки на странице sharepoint могут указывать на «/_layouts/dir/subdir/page.aspx», но при передаче на прокси-сервер эта ссылка отображается на странице как http://external.site.com/_layouts/... (нет / appname добавлено). Итак, похоже, нам нужно перезаписать URL.

Но затем это распространяется и на другие проблемы - относительные URL-адреса в таблицах стилей, javascript и т. Д., Которые генерирует SharePoint (т.е. мы не контролируем их).

SharePoint также создает некоторые URL-адреса в виде "\ u002flayouts \ u002fuserdisp.aspx? Force = True \ u0026ID ="

Пока я думаю, что лучший способ решить эту проблему для каждого URL-адреса (в том числе в таблицах стилей, javascript и т. Д.):

  1. Переключите неправильно повернутые косые черты.
  2. Превратите любые относительные URL-адреса (URL-адреса, начинающиеся с "/", как я предполагаю, мы можем определить это ") и превратите их в http://external.site.com/appname/[URL]"
  3. Используйте ProxyPass и ProxyPass в обратном порядке для преобразования путей (которые теперь должны быть абсолютными и правильно отформатированы).

Это может быть правильно или неправильно, и я приветствую ваше мнение о том, как это сделать лучше.

Преследуя эту цель, у меня есть файл конфигурации, который, я уверен, во многих отношениях неверен, но я думаю, что это только начало. Также хотелось бы узнать ваше мнение о том, как лучше реализовать мою идею.

ProxyRequests off
<Proxy *>
 Order deny,allow
 Allow from all
</Proxy>

ProxyPass /appname/ http://internal.site.com/
ProxyPassReverse /appname/ http://internal.site.com/


<Location /appname/>

ProxyHTMLEnable On
ProxyHTMLExtended On
ProxyHTMLLogVerbose On

#List of HTML elements to change
ProxyHTMLLinks               a                              href
ProxyHTMLLinks               area                       href
ProxyHTMLLinks               link                         href
ProxyHTMLLinks               img                         src longdesc usemap
ProxyHTMLLinks               object                   classid codebase
data usemap
ProxyHTMLLinks               q                             cite
ProxyHTMLLinks               blockquote         cite
ProxyHTMLLinks               ins                          cite
ProxyHTMLLinks               del                          cite
ProxyHTMLLinks               form                      action
ProxyHTMLLinks               input                     src usemap
ProxyHTMLLinks               head                      profile
ProxyHTMLLinks               base                      href
ProxyHTMLLinks               script                     src for

# To support scripting events (with ProxyHTMLExtended On),
# you'll need to declare them too.

ProxyHTMLEvents           onclick ondblclick onmousedown onmouseup \
                               onmouseover onmousemove onmouseout onkeypress \
                               onkeydown onkeyup onfocus onblur onload \
                               onunload onsubmit onreset onselect onchange

#Goal: Map any URL that starts with a / (i.e. a relative link) to
http://internal.site.com/
ProxyHTMLURLMap ^/ http://internal.site.com/

</Location>

Заранее благодарим вас за любую помощь, которую вы можете оказать!

Всего наилучшего, Шон

Сложность, с которой вы сталкиваетесь, является типичной: вы хотите получить доступ к веб-приложению, используя путь URI, отличный от ожидаемого приложением. Стандартный прокси-сервер Apache заботится только о ссылках в заголовках (например, Location: заголовки), но не в содержимом документа, поэтому ссылки, использующие абсолютные пути, такие как /images/foo.png больше не достигают нужного места (относительные пути обычно работают нормально).

Распространенное решение - использовать mod_proxy_html модуль, который позволит вам выполнять замены в содержании ваших веб-страниц. По факту, этот учебник охватывает именно ту ситуацию, которую вы описали.

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

https://efg.site.com скорее, чем https://www.site.com/efg. Вы всегда можете настроить перенаправление из папки, если оно должно начинаться там. Это должно избежать проблемы относительных ссылок.