Apache и IIS бок о бок (оба слушают порт 80) на windows2003

Каковы хорошие способы сделать это? Можно ли сделать это чисто?

В идеале я хотел бы использовать заголовки пакетов, чтобы решить, какой сервер должен обрабатывать запросы. Однако, если есть более простой/лучший способ, дайте мне знать.

Ответ 1

Невозможно, чтобы оба сервера прослушивали один и тот же порт на одном и том же IP-адресе: поскольку один сокет может быть открыт только одним процессом, только первый сервер, настроенный для определенной комбинации IP-портов, успешно свяжется и второй - неудачный.

Таким образом, вам необходимо обходное решение для достижения желаемого. Самый простой - это, вероятно, запустить Apache в вашей основной комбинации IP/port и запросить маршрут для IIS (который должен быть настроен для другого IP и/или порта), используя mod_rewrite.

Имейте в виду, что альтернативный IP-адрес и порт IIS должны быть доступны для клиентов, подключающихся к вашему серверу: если у вас есть только один доступный IP-адрес, вы должны позаботиться о выборе порта IIS, который обычно отсутствует заблокированный брандмауэрами (8080 может быть хорошим вариантом или 443, хотя вы используете обычный HTTP, а не SSL).

P.S. Также обратите внимание, что вам необходимо изменить конфигурацию по умолчанию IIS с помощью httpcfg, прежде чем он разрешит другим серверам работать на порту 80 на любом IP-адресе на одном сервере: см. Ответ Микки МакКуад для процедуры, чтобы сделать это...

Ответ 2

Я нашел этот пост, в котором предлагалось иметь два отдельных IP-адреса, чтобы оба могли прослушивать порт 80.

Была оговорка, что вам пришлось внести изменения в IIS из-за пула сокетов. Вот инструкции, основанные на ссылке выше:

  1. Извлеките утилиту httpcfg.exe из области инструментов поддержки на компакт-диске Win2003.
  2. Остановите все службы IIS: net stop http/y
  3. Пусть IIS прослушивает только IP-адрес, который я назначил для IIS: httpcfg set iplisten -i 192.168.1.253
  4. Убедитесь, что: httpcfg query iplisten (перечисленные IP-адреса являются единственными IP-адресами, которые IIS будет прослушивать, и никакими другими.)
  5. Перезапустите службы IIS: net start w3svc
  6. Запустите сервис Apache

Ответ 3

Для людей с единственным одним IP-адресом и несколькими сайтами на одном сервере вы можете настроить IIS для прослушивания на другом порту, кроме 80, например 8080 установив порт TCP в свойствах каждого из его сайтов (включая по умолчанию).

В Apache включите mod_proxy и mod_proxy_http, затем добавьте все VirtualHost (после всех остальных), чтобы запросы Apache не обрабатывали явным образом, чтобы "перенаправлять" на IIS.

<VirtualHost *:80>
    ServerName foo.bar
    ServerAlias *
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
</VirtualHost>

Теперь вы можете заставить Apache обслуживать некоторые сайты, а IIS - другим, без видимых различий для пользователя.

Изменить: ваши сайты IIS не должны включать их номер порта в любые URL-адреса в своих ответах, включая заголовки.

Ответ 4

Вам нужно как минимум mod_proxy и mod_proxy_http, которые оба являются частью дистрибутива (но не каждый раз автоматически создаются). Затем вы можете посмотреть здесь: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

Простейшая конфигурация в контексте виртуального хоста:

ProxyPass         /winapp http://127.0.0.1:8080/somedir/

ProxyPassReverse  /winapp http://127.0.0.1:8080/somedir/

(В зависимости от вашего webapp фактическая конфигурация может стать более сложной.) Это прозрачно перенаправляет каждый запрос на путь winapp/на сервер Windows и передает полученный результат обратно клиенту.

Внимание: заботитесь о ссылках на поставленных страницах: они не переписаны, поэтому вы можете сэкономить много хлопот, если обычно используете относительные ссылки в своем приложении, например

<a href=../pics/mypic.jpg">

вместо обычного кошмара интеграции каждой ссылки, являющейся абсолютной:

<a href="http://myinternalhostname/somedir/crappydesign.jpg">

ДЛИННИК ПЛОХО ВСЕ КАЖДОЕ ВРЕМЯ!

Для перезаписи ссылок на страницах есть mod_proxy_html (не путать с mod_proxy_http!), но это другая история и жестокая.

Ответ 5

Либо два разных IP-адреса (например, рекомендованные), либо один веб-сервер обратного проксирования другого (который прослушивает порт < > 80).

Например: Apache прослушивает порт 80, IIS на порту 8080. Каждый HTTP-запрос сначала отправляется в Apache (конечно). Затем вы можете перенаправить каждый запрос в конкретный (именный виртуальный) домен или каждый запрос, содержащий конкретный каталог (например, http://www.example.com/winapp/) к IIS.

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

Недостатки: некоторые webapps запрограммированы и реальная боль в заднице, чтобы интегрироваться в инфраструктуру обратного прокси. Рабочий Web-интерфейс IIS зависит от рабочего Apache, поэтому у нас есть некоторые взаимозависимости.

Ответ 6

Я вижу, что это довольно старый пост, но натолкнулся на это, ища ответ на эту проблему. После прочтения некоторых ответов они кажутся очень длинными, поэтому примерно через 5 минут мне удалось решить проблему очень просто следующим образом:

httpd.conf для Apache оставить порт прослушивания как 80 и "Имя сервера" как FQDN/IP: 80.

Теперь для IIS перейдите в "Административные службы" > "Диспетчер IIS" > "Сайты" в раскрывающемся списке "Влево" > в правом окне выберите верхнюю строку (веб-сайт по умолчанию), а затем привязки справа.

Теперь выберите http > edit и измените на 81 и введите свой локальный IP-адрес для сервера/компьютера, а в домене введите либо полное доменное имя (www.domain.com), либо внешний IP-адрес.

Перезагрузите оба сервера, чтобы ваши порты были открыты как на маршрутизаторе, так и на брандмауэре.

Звучит долго, но буквально занял 5 минут. отлично работает.

Система: Windows 8, IIS 8, Apache 2.2

Ответ 7

Установка Windows 10 У меня была эта проблема: apache (ipv4) и служба спулера (ipv6), прослушивающие один и тот же порт 80.

Я решил изменить файл apache httpd.conf, изменив строку

Слушайте 80

к

Слушайте 127.0.0.1:80

Ответ 8

Это не совсем так. Например. для HTTP Windows поддерживает совместное использование портов на основе URL-адресов, позволяя нескольким процессам использовать один и тот же IP-адрес и порт.

Ответ 9

Вам нужно будет использовать разные IP-адреса. Сервер, будь то Apache или IIS, захватывает трафик на основе IP и порта, который когда-либо они обязаны слушать. Когда он начинает прослушиваться, он использует заголовки, такие как имя сервера для фильтрации и определения того, к какому сайту обращаются. Вы не можете этого сделать, просто измените имя сервера в запросе