Можно создать VirtualHosts в Apache и затем использовать ProxyPass для subdomain1.mydomain.com, чтобы инвертировать прокси в IIS и иметь VirtualHost по умолчанию, которые инвертируют прокси в VM Linux.
Вы хотели бы конфигурацию, которая была чем-то вроде этого:
<Virtualhost *:80>
ServerName subdomain1.mydomain.com
....
# Reverse proxy into IIS
ProxyRequests off
ProxyPass / http://ip.of.IIS.machine/
ProxyPassReverse / http://ip.of.IIS.machine/
</VirtualHost>
<VirtualHost _default_:80>
....
ProxyRequests off
ProxyPass / http://ip.of.linux.machine/
ProxyPassReverse / http://ip.of.linux.machine/
</VirtualHost>
Те конфигурации пропускают большую часть конфигурации, но важные биты - то, что первые соответствия определения VirtualHost на subdomain1.mydomain.com, и это затем делает обратный прокси в машину IIS. Второе определение соответствует всему остальному и обратным прокси в машину Linux.
Отметьте, я не протестировал вышеупомянутое, как оно записано, но я определенно получил апачские настройки с несколькими virtualhosts, где один vritualhost является обратным прокси в другую машину, таким образом, основная теория прекрасна.
Поразмыслив над этим некоторое время, я думаю, что более правильный подход - использовать «пространства имен» виртуальных ресурсов RPM. Например:
Provides: resource # 'resource' is available to the whole system
Provides: namespace(resource) # 'resource' is specifically available only to "namespace"
RPM в конечном итоге выглядят следующим образом:
grunk-libs.rpm
Provides: libgrunk.so.1()(%{_arch}) # System library. unchanged
foo.rpm
Requires: /bin/sh
Requires: libc.so.6()(%{_arch})
Requires: foo(libgrunk.so.1()(%{_arch})) # Note special foo(...) namespace
foo-grunklibs.rpm
Provides: foo(libgrunk.so.1()(%{_arch})) # Note special foo(...) namespace
Таким образом, зависимость foo
от специальной сборки libgrunk
не может быть удовлетворена обычным grunk -libs
RPM, но должен удовлетворяться специфичной для foo сборкой этой библиотеки.
Мое доказательство концепции выглядит следующим образом:
Name: foo
...
Source99: find-namespaced-requires # Here's the magic
%define _use_internal_dependency_generator 0
%define __find_requires %{SOURCE99} foo /bin/sh glibc
Где сценарий find-namespaced-requires обертывает стандартный RPM % {_ rpmconfigdir} / find-requires и фильтрует его вывод. Его первый аргумент - это используемое пространство имен ( "foo (...)"
), а последующие аргументы - это зависимости или RPM, обеспечивающие зависимости, которые должны не быть пространством имен. В этом примере я хочу, чтобы foo
требовал / bin / sh основной системы, а также обычные libc, libdl, libm и т. Д. Из glibc
, но все остальные зависимости должны приниматься чтобы быть конкретным для foo
.
Это можно было бы сделать немного более понятным и универсальным, заключив большую часть вышеперечисленного в RPM во время сборки и сказав что-то вроде:
Name: foo
BuildRequires: special-deps-macros
%define _namespace foo # defaults to %{name} ?
%define _generic_dependencies ... # defaults to /bin/sh glibc libselinux ?