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

Обратный прокси-сервер Apache перед RD Web Access IIS

Я только что настроил службу Microsoft Remote Desktop Services на внутреннем сервере Windows Server 2012 R2. У меня есть доступ к RDP через внешнюю сеть с переадресацией портов. Однако, поскольку у меня есть дополнительные веб-серверы, работающие на порте 80/443, я не могу предоставить доступ к удаленному рабочему столу, запущенному на IIS, напрямую в Интернет.

У меня есть конфигурация обратного прокси-сервера с Apache для всех моих внутренних сайтов, поэтому я пытаюсь использовать то же самое для веб-доступа к удаленным рабочим столам. Моя конфигурация (как для HTTP, так и для HTTPS) выглядит следующим образом

<VirtualHost *:80>
    ServerName foo.example.com

    ProxyPass / http://192.168.1.xxx/
    ProxyPassReverse / http://192.168.1.xxx/
</VirtualHost>

Эта конфигурация работает, но есть проблема. При подключении напрямую к foo.example.com, Я получаю страницу IIS по умолчанию, как и ожидалось. Однако при доступе к http://foo.example.com/RDWeb/, URL-адрес изменится на http://192.168.1.xxx/RDWeb, к которому я, очевидно, не могу получить доступ за пределами моей сети. Мне нужно, чтобы он оставался http://foo.example.com/RDWeb/.

Я пробовал добавить ProxyPreserveHost On к моей конфигурации apache, когда я это делаю, я получаю бесконечный цикл перенаправления, так что это тоже не работает. Я почти уверен что это НЕ проблема IIS, потому что, если я установил свой локальный файл хоста, чтобы указать foo.example.com к 192.168.1.xxx, работает без проблем.

Что-то мне не хватает в конфигурациях обратного прокси-сервера Apache?

Что ж, после прозрения я нашел причину своих проблем.

Оказывается, я действительно должен был оставить ProxyPreserveHost On чтобы разрешить перезапись URL-адреса на правильный внешний URL-адрес. Однако, поскольку у моего внешнего URL-адреса был сертификат SSL, я получал бесконечный цикл перенаправления, который выглядел следующим образом

External URL (https) -> Internal (http) -> Internal (https) -> External (https)

Я исправил это своим поворотом ProxyPass и ProxyPassReverse директивы для прокси HTTPS вместо внутреннего IP-адреса HTTP. Из-за этого мне также пришлось добавить SSLProxyEngine On директива.