У меня Tomcat и IIS 7 установлены вместе на сервере Windows 2008. У машины два IP-адреса (134.133.1.1 и 134.133.2.2).
Я хочу, чтобы Tomcat справился 134.133.1.1, на порт 80, и IIS для обработки обоих 134.133.2.2, на 80 порт И 134.133.1.1, на порт 443, но, похоже, не удается собрать последние два вместе (я могу получить один или другой отдельно в IIS вместе с первым IP-адресом в Tomcat).
Я настроил Tomcat для успешного прослушивания IP 134.133.1.1 на порту 80 с этой конфигурацией;
<Connector port="80"
protocol="HTTP/1.1"
address="134.133.1.1"
connectionTimeout="20000"
redirectPort="8443" />
У меня также есть сайт, настроенный в IIS, привязанный к ip 134.133.1.1, на порту 443 (SSL). Когда я включаю IIS после Tomcat, я могу успешно подключиться к 134.133.1.1:80 (Tomcat) и 134.133.1.1:443 (IIS) (по желанию).
Проблема теперь возникает, когда я хочу представить новый сайт через IIS с новым IP-адресом. В IIS я установил новый сайт с IP 134.133.2.2, порт 80. Я не могу запустить сайт. Журнал событий показывает эту ошибку;
Unable to bind to the underlying transport for [::]:80. The IP Listen-Only list may contain a reference to an interface which may not exist on this machine. The data field contains the error number.
Я думаю, это связано с тем, что IIS 7 пытается прослушивать порт 80 на всех IP-адресах, и это не удается, потому что Tomcat использует порт 80 для 134.133.1.1. Исходя из чтения, решение состоит в том, чтобы указать IP-адрес, который IIS должен привязать к порту 80. Проблема в том, что когда я добавляю 134.133.2.2 в список iplisten, я получаю 404, когда пытаюсь перейти к 134.133.1.1:443. Я предполагаю, что это связано с тем, что IIS больше не слушает ЛЮБОЙ порт на 134.133.1.1.
Как мне решить эту проблему, чтобы IIS вернул оба сайта?
РЕДАКТИРОВАТЬ: По запросу моя привязка IIS для сайта A - 134.133.2.2 на порту 80 (http) и 134.133.2.2 на порту 443. Для сайта B в IIS привязка 134.133.1.1 на порту 443 (https). Обратите внимание, что IP-адреса в этом примере предназначены только для примера, но соответствуют моей настройке.
У меня была такая же проблема в Windows Server 2008, когда я пытался запустить Tomcat и IIS на порту 80 на двух разных сетевых интерфейсах. Чтобы заставить IIS прослушивать порт 80 только на определенном сетевом интерфейсе, вы должны следовать приведенным ниже инструкциям. Недостаточно просто изменить привязку сайтов в IIS.
Из статьи 954874 Microsoft KB:
Когда вы устанавливаете Internet Information Services (IIS) 7.0 в Windows Server 2008, IIS привязывается ко всем IP-адресам на сервере, а не только к IP-адресам, назначенным веб-сайтам. Это может происходить, даже если для свойства метабазы DisableSocketPooling в параметрах конфигурации IIS установлено значение True.
Чтобы решить эту проблему, используйте служебную программу командной строки Netsh для настройки списка прослушивания IP-адресов в Windows Server 2008.
netsh http добавить iplisten xxx.xxx.x.x
Источник: http://support.microsoft.com/kb/954874
Не использовать iplisten
назначать IP-адреса IIS.
Просто используйте привязки для каждого сайта. iplisten
связывает IP-адрес со службой HTTP.sys и действительно связывает вам руки. Вы хотите, чтобы HTTP.sys прослушивал только трафик на порту 443 на IP 134.133.1.1 и на трафик на портах 80 и 443 на IP 134.133.2.2. Просто добавьте IP-адреса и порты в привязки и посмотрите, решит ли это вашу проблему.
В качестве альтернативы запустите netstat -aon
и посмотрите, что прослушивает TCP-порт 80. Вы получите список PID, который можно сопоставить с именем процесса в диспетчере задач. Например, если я запускаю netstat -aon, я получаю примерно следующее:
Proto Local Address Foreign Address State PID
TCP 172.18.5.23:443 0.0.0.0:0 LISTENING 1268
TCP 172.18.5.23:80 0.0.0.0:0 LISTENING 1268
TCP 172.18.5.24:80 135.25.167.62:443 ESTABLISHED 9652
TCP 172.18.5.24:18462 10.200.40.1:443 ESTABLISHED 7312
TCP 172.18.5.23:18463 10.200.40.1:443 ESTABLISHED 7312
Теперь, если я открою диспетчер задач и посмотрю на строку PID, я могу сравнить и увидеть, что Tomcat7.exe имеет PID 9652, поэтому он прослушивает TCP-порт 80. Сравните два результата. Вы можете обнаружить, что другой процесс крадет у вас порт 80 с этого IP-адреса.