it-swarm.com.de

Apache und IIS nebeneinander (beide hören auf Port 80) unter Windows 2003

Was sind einige gute Möglichkeiten, um dies zu tun? Kann man das überhaupt sauber machen?

Idealerweise möchte ich Paket-Header verwenden, um zu entscheiden, welcher Server Anforderungen verarbeiten soll. Wenn es jedoch einen einfacheren/besseren Weg gibt, lass es mich wissen.

42
Dane O'Connor

Es ist unmöglich, dass beide Server denselben Port an derselben IP-Adresse überwachen: Da ein einzelner Socket nur von einem einzelnen Prozess geöffnet werden kann, wird nur der erste Server, der für eine bestimmte IP/Port-Kombination konfiguriert wurde, erfolgreich gebunden, und der zweite wird versagen.

Sie benötigen daher eine Problemumgehung, um das zu erreichen, was Sie möchten. Am einfachsten ist es wahrscheinlich, Apache auf Ihrer primären IP/Port-Kombination auszuführen und Anforderungen für IIS (das für eine andere IP und/oder einen anderen Port konfiguriert werden sollte) mit weiterzuleiten. -mod_rewrite .

Beachten Sie, dass die alternative IP-Adresse und der alternative Port IIS) für die Clients erreichbar sein sollten, die eine Verbindung zu Ihrem Server herstellen. Wenn Sie nur eine einzige IP-Adresse zur Verfügung haben, sollten Sie darauf achten, ein = auszuwählen IIS Port, der im Allgemeinen nicht von Firewalls blockiert wird (8080 ist möglicherweise eine gute Option, oder 443, obwohl Sie normales HTTP und nicht SSL verwenden)

P.S. Beachten Sie außerdem, dass Sie die Standardkonfiguration von IIS= mit httpcfg ändern müssen, damit andere Server an Port 80 mit einer beliebigen IP-Adresse auf demselben Server ausgeführt werden können. Siehe die Antwort von Micky McQuade für das Verfahren, um das zu tun ...

31
mdb

Ich habe diesen Beitrag gefunden, der vorschlug, zwei separate IP-Adressen zu haben, damit beide Port 80 abhören können.

Es gab eine Einschränkung, die Sie aufgrund von Socket-Pooling in IIS ändern mussten. Hier sind die Anweisungen basierend auf dem obigen Link:

  1. Extrahieren Sie das Dienstprogramm httpcfg.exe Aus dem Bereich der Support-Tools auf der Win2003-CD.
  2. Beenden Sie alle IIS Dienste: net stop http /y
  3. Lassen Sie IIS nur die IP-Adresse abhören, die ich für IIS festgelegt hatte: httpcfg set iplisten -i 192.168.1.253
  4. Stellen Sie sicher: httpcfg query iplisten (Die aufgeführten IP-Adressen sind die einzigen IP-Adressen, die IIS abhört, und keine anderen.)
  5. IIS Dienste neu starten: net start w3svc
  6. Starten Sie den Apache-Dienst
28
Micky McQuade

Für Benutzer mit nur einer IP-Adresse und mehreren Standorten auf einem Server können Sie IIS zum Abhören eines anderen Ports als _80_, z. B. _8080_, indem Sie den TCP Port in den Eigenschaften der einzelnen Sites (einschließlich der Standard-Site) festlegen.

Aktivieren Sie in Apache _mod_proxy_ und _mod_proxy_http_ und fügen Sie dann (nach allen anderen) einen Catch-All-VirtualHost hinzu, damit Anforderungen, die Apache nicht explizit verarbeitet, an IIS "weitergeleitet" werden.

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

Jetzt können Sie Apache veranlassen, einige Sites und IIS andere zu bedienen, ohne sichtbaren Unterschied für den Benutzer.

Bearbeiten: Ihre IIS Websites dürfen ihre Portnummer nicht in URLs in ihren Antworten, einschließlich Kopfzeilen, enthalten.

13
Walf

Sie benötigen mindestens mod_proxy und mod_proxy_http, die beide Teil der Distribution sind (jedoch nicht immer automatisch erstellt). Dann können Sie hier nachschauen: http://httpd.Apache.org/docs/2.2/mod/mod_proxy.html

Die einfachste Konfiguration in einem virtualhost-Kontext ist:

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

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

(Abhängig von Ihrer Webanwendung wird die eigentliche Konfiguration möglicherweise komplexer.) Dadurch wird jede Anforderung auf dem Pfad winapp/zum Windows-Server transparent umgeleitet und die resultierende Ausgabe zurück an den Client übertragen.

Achtung: Achten Sie auf die Links auf den gelieferten Seiten: Sie werden nicht umgeschrieben, sodass Sie sich viel Mühe sparen können, wenn Sie in Ihrer App im Allgemeinen relative Links verwenden, wie z

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

anstelle des üblichen Integrationsalptraums, bei dem jeder Link absolut ist:

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

DAS SPÄTERE IS SCHLECHT FAST JEDES MAL!

Zum Umschreiben von Links in Seiten gibt es mod_proxy_html (nicht zu verwechseln mit mod_proxy_http!), Aber das ist eine andere Geschichte und auch eine grausame.

3
Dirk Taggesell

Entweder zwei verschiedene IP-Adressen (wie empfohlen) oder ein Webserver stellt einen Reverse-Proxy für den anderen bereit (der einen Port <> 80 überwacht).

Zum Beispiel: Apache lauscht auf Port 80, IIS auf Port 8080. Jede http-Anforderung wird (natürlich) zuerst an Apache gesendet. Sie können dann entscheiden, jede Anforderung an eine bestimmte (namens virtual) weiterzuleiten. Domain oder jede Anfrage, die ein bestimmtes Verzeichnis enthält (zB http://www.example.com/winapp/ ) an den IIS.

Vorteil dieses Konzepts ist, dass Sie nur einen Server haben, der der Öffentlichkeit zuhört, anstatt zwei. Sie sind flexibler als mit zwei unterschiedlichen Servern.

Nachteile: Einige Webapps sind schlecht gestaltet und es ist ein echtes Problem, sie in eine Reverse-Proxy-Infrastruktur zu integrieren. Eine funktionierende IIS webapp ist abhängig von einem funktionierenden Apache, daher gibt es einige gegenseitige Abhängigkeiten.

2
Dirk Taggesell

Ich sehe, dass dies ein ziemlich alter Beitrag ist, bin aber auf diese Suche nach einer Antwort für dieses Problem gestoßen. Nachdem ich einige der Antworten gelesen hatte, schienen sie sehr umständlich zu sein, so dass ich es nach ungefähr 5 Minuten schaffte, das Problem ganz einfach wie folgt zu lösen:

httpd.conf für Apache belassen Sie den Listen-Port auf 80 und den Servernamen auf FQDN/IP: 80.

Gehen Sie nun für IIS zu Administrative Services> IIS Manager> 'Sites' im linken Navigationsfeld> im rechten Fenster zur obersten Zeile (Standard) Website) dann Bindungen auf der rechten Seite.

Wählen Sie nun http> edit and change to 81 und geben Sie Ihre lokale IP für den Server/PC ein. Geben Sie in der Domain entweder Ihren FQDN (www.domain.com) oder eine externe IP ein, die Sie schließen möchten.

Starten Sie beide Server neu und stellen Sie sicher, dass Ihre Ports sowohl auf dem Router als auch auf der Firewall geöffnet sind.

Das klingt langatmig, hat aber buchstäblich 5 Minuten gedauert. funktioniert perfekt.

System: Windows 8, IIS 8, Apache 2.2

0
Matthew White

Das stimmt nicht ganz. Z.B. für HTTP Windows unterstützt die URL-basierte Portfreigabe, sodass mehrere Prozesse dieselbe IP-Adresse und denselben Port verwenden können.

0
Andre Kaufmann

Installation von Windows 10 Ich hatte dieses Problem: Apache (ipv4) und Spooler-Dienst (ipv6) hören den gleichen 80-Port.

Ich habe beschlossen, die Apache-Datei httpd.conf zu bearbeiten und die Zeile zu ändern

Hören Sie 80

zu

Hören Sie 127.0.0.1:80

0