Apache и IIS рядом (оба слушания порта 80) на windows2003

Решение Herer:

/**
 * Tests two data structures for equality
 * @param {object} x
 * @param {object} y
 * @returns {boolean}
 */
var equal = function(x, y) {
    if (typeof x !== typeof y) return false;
    if (x instanceof Array && y instanceof Array && x.length !== y.length) return false;
    if (typeof x === 'object') {
        for (var p in x) if (x.hasOwnProperty(p)) {
            if (typeof x[p] === 'function' && typeof y[p] === 'function') continue;
            if (x[p] instanceof Array && y[p] instanceof Array && x[p].length !== y[p].length) return false;
            if (typeof x[p] !== typeof y[p]) return false;
            if (typeof x[p] === 'object' && typeof y[p] === 'object') { if (!equal(x[p], y[p])) return false; } else
            if (x[p] !== y[p]) return false;
        }
    } else return x === y;
    return true;
};

Работает с любой вложенной структурой данных и, очевидно, игнорирует методы объектов. Даже не думайте о расширении Object.prototype с помощью этого метода, когда я это пробовал один раз, jQuery сломался;)

Для большинства массивов он все же быстрее, чем большинство решений для сериализации. Вероятно, это самый быстрый метод сравнения для массивов записей объектов.

42
задан Dane O'Connor 24 September 2008 в 05:30
поделиться

5 ответов

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

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

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

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

31
ответ дан mdb 4 August 2019 в 19:50
поделиться

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

был протест, что необходимо было внести изменение в IIS из-за объединения в пул сокета. Вот инструкции на основе ссылки выше:

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

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

Самая Простая конфигурация в virtualhost контексте:

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

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

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

Внимание: Заботьтесь о ссылках на поставленных страницах: они не переписываются, таким образом, можно сохранить себя стычка lotsa при общем использовании относительных ссылок в приложении, как

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

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

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

ПОСЛЕДНИЙ ПЛОХ ПОЧТИ КАЖДЫЙ РАЗ!

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

3
ответ дан 4 August 2019 в 19:50
поделиться

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

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

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

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

2
ответ дан 4 August 2019 в 19:50
поделиться

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

-1
ответ дан stephenbayer 4 August 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: