Какие есть хорошие способы сделать это? Это вообще возможно сделать чисто?
В идеале я'd, как использовать заголовки пакетов, чтобы решить, что сервер должен обрабатывать запросы. Однако, если есть более простой/лучший способ, дайте мне знать.
Это'невозможно на обоих серверах, чтобы слушать один и тот же порт на одном IP-адресу:, поскольку один сокет может быть открыт только один процесс, только первый сервер настроен на определенный IP-адрес/порт комбинации привязки успешно, а второй не удастся.
Таким образом, вам понадобится обходной путь, чтобы достичь того, чего вы хотите. Проще наверное запустить Apache на ваш основной комбинации IP/порт, и его маршрутизации запросов для IIS (который должен быть настроен на разные IP и/или порт) с помощью и mod_rewrite.
Имейте в виду, что альтернативные IP и порт IIS работает на должны быть доступны для клиентов, подключающихся к серверу: если у вас есть только один IP-адрес, то вы должны позаботиться, чтобы выбрать в IIS порт, что это'т, как правило, заблокирован брандмауэрами (8080 может быть хорошим вариантом, или 443, хотя вы'вэ работает через обычный HTTP, а не по протоколу SSL)
П. С. Также, обратите внимание, что вы должны изменить IIS по умолчанию конфигурации с использованием httpcfg, прежде чем другие сервера для работы на порт 80 на любой IP-адрес на том же сервере: см. Микки Маккуэйд'ы ответ для процедуры для этого...
Я нашел этот пост, который предложил два отдельных IP-адресов, так что оба могли слушать на порту 80.
Там был один нюанс, который вы должны были внести изменения в IIS из-за сокет. Здесь представлены инструкции по вышеуказанной ссылке:
httpcfg набор iplisten -я 192.168.1.253
httpcfg iplisten запроса
(перечисленных ИПС-это только IP-адреса, что IIS будет слушать и никто другой.)Для людей с только один IP-адрес и несколько мест на одном сервере, вы можете настроить IIS на порт, отличный от 80
, электронная.г 8080
, установив TCP-порт в свойствах каждого из своих сайтов (в том числе по умолчанию).
В Apache, чтобы mod_proxy " и " mod_proxy_http`, затем добавить все рубрики (после всех остальных), так что запросы на Апач разве'т явно обработке приобретают "переданы" О в IIS.
<VirtualHost *:80>
ServerName foo.bar
ServerAlias *
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
</VirtualHost>
Теперь вы можете иметь Apache служить некоторые сайты и IIS служить другим, без видимых различий для пользователя.
Редактировать: ваши сайты IIS не должен включать номер порта в URL-адреса в своих ответах, включая заголовки.
Вам нужно по крайней мере mod_proxy и mod_proxy_http которые обе являются частью дистрибутива (но не каждый раз автоматически). Тогда вы можете посмотреть здесь: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
Простой config в контексте хост-это:
ProxyPass /winapp http://127.0.0.1:8080/somedir/
ProxyPassReverse /winapp http://127.0.0.1:8080/somedir/
(В зависимости от вашего веб-приложение, фактический config может стать более изощренными. ) Что прозрачно перенаправляет все запросы на путь winapp/ Windows на сервере и передает результат обратно клиенту.
Внимание: будьте внимательны из одной в поставленном страниц: они не'т переписано, так что вы можете сэкономить много хлопот, если вы используете относительные ссылки в вашем приложении, как
<a href=../pics/mypic.jpg">
вместо обычного интеграции кошмар каждой ссылке становится абсолютным:
<a href="http://myinternalhostname/somedir/crappydesign.jpg">
ПОСЛЕДНЕЕ ПЛОХО ПОЧТИ КАЖДЫЙ РАЗ!
Для переписывания ссылок на страницах там'ы mod_proxy_html (не путать с mod_proxy_http!) но, что'ы другая история и жестокости, а также.
Либо два разных IP-адресов (как рекомендуется) или один веб-сервер обратный прокси на другой (который прослушивает порт <>80).
Например: Апач слушает порт 80, IIS на порт 8080. Каждый HTTP-запрос идет на Apache первых (естественно). Затем вы можете решить, чтобы вперед все запросы к определенному (по имени виртуального) домен или каждый запрос, содержащий определенный каталог (например, http://www.example.com/winapp/) к IIS.
Преимущество этой концепции заключается в том, что у вас есть только один сервер прислушиваясь к общественному вместо двух, вы более гибкими с двух разных серверов.
Недостатки: некоторые веб-приложений являются crappily разработана и реальная боль в заднице, чтобы интегрироваться в реверс-прокси инфраструктуры. Рабочая служб IIS веб-приложения зависит от работы сервера Apache, поэтому у нас есть некоторые взаимозависимости.
Я вижу, это довольно старый пост, но наткнулся на это в поисках ответа на эту проблему. После прочтения некоторых ответов, они, кажется, очень долго наматывается, поэтому примерно через 5 минут мне удалось очень просто решить проблему следующим образом:
файл httpd.conf для апача оставить слушает порт 80 и 'имя сервера' а доменное имя/IP-адрес :80.
Теперь для IIS зайти в административные службы и GT; диспетчер IIS > 'сайтов' в левой панели навигации выпадающего > В правом окне выберите верхнюю строку (веб-узел по умолчанию), то привязки на право.
Теперь выберите HTTP и GT; редактировать и изменять до 81 и введите ваш локальный IP для сервера/ПК и в домен ввести ваше доменное имя (www.domain.com) или внешний IP близко.
Перезагрузить оба сервера обеспечивают вашу порты открыты на обоих маршрутизатор и брандмауэр, сделал.
Это звучит запутанно, но буквально 5 минут играть. отлично работает.
Системы: ОС Windows 8, в IIS 8, Апач 2.2
Установка Windows 10 у меня была такая проблема: Апач(IPv4) и служба диспетчера печати(протокол IPv6) слушать один и тот же порт 80.
Я решил редактирования в Apache файл httpd.файл conf изменив строку
Слушать 80
для
Слушать 127.0.0.1:80
Что's не совсем верно. Е. Г. для HTTP Windows поддерживает URL-адрес общего доступа на основе портов, что позволяет несколько процессов используют один IP-адрес и порт.
Вам нужно будет использовать разные IP-адреса. Сервер, будь то Apache или IIS, хватает трафика на основе IP и порт, которые они обязаны слушать. Как только он начинает прислушиваться, затем он использует заголовки, такие как имя сервера, фильтровать и определять, какой сайт осуществляется доступ. Вы можете'т сделать это будет просто изменять имя сервера в запросе