URL Rewrite / Reverse Proxy einrichten
Bei der Installation von MapEdit Mobile, MapEdit Portal oder MapEdit TileServer kann es notwendig sein für den IIS ein URL-Rewrite/ Reverse Proxy einzurichten.
Das ist dann notwendig, wenn man den Port 8080
von Tomcat/Wildfly nicht freigeben will, oder kann. Zudem, wenn die i.d.R. notwendige SSL-Verschlüsselung und Einbindung eines dafür notwendigen Zertifikates am IIS/Webserver eingerichtet wird.
Folgende Voraussetzungen müssen erfüllt sein
- der IIS benötigt das allgemeine HTTP-Feature: HTTP-Umleitung
- URL-Rewrite muss installiert sein
- Application Request Routing muss installiert und aktiviert sein
- Server Variablen HTTP Encode ist aktiviert
- es existieren die Servervariablen:
HTTP_X_Real_IP
,HTTP_X_Original_Host
- es ist die folgende Servervariable definiert (falls keine Vektordaten in Mobile angezeigt werden und http mit https vermischt wird, ggfs. zusätzlich in den Umleitungsregeln definieren):
HTTP_X_Forwarded_SSL
- es ist ein gültiges 3-stufiges Zertifikat für die Website definiert, z.B. für
mobile-kunde.mapedit.de
Installation
Die Systemvorraussetzungen IIS für MapEdit prüfen und Grundinstallation von MapEdit Mobile, Portal, TileServer durchführen. Anschließend müssen die zwei Erweiterungen für den IIS von Microsoft installiert werden.
Downloadlinks siehe oben:
Zuerst URL Rewrite installieren und im Anschluss die Application Request Routing.
Alternativ haben wir im Software Repository Downloadbereich die Setups und auch Beispiele für die Einstellungen in der web.config bereitgestellt.
Konfiguration im IIS
Application Request Routing aktivieren
Nach der Installation der Microsoft IIS Erweiterungen im IIS muss das Application Request Routing aktiviert werden. Es befindet sich im IIS Manager direkt oben am Server, oder ist auf der Webseite einzustellen.
Application Request Routing Cache ➝ Rechte Seite ➝ Server Proxy Settings
Dort den Haken bei Enable Proxy aktivieren
Server Variablen HTTP encode aktivieren
Im IIS das Icon URL Rewrite auf der Default Webseite öffnen. Hier kann man die Server Variablen einsehen.
Auf der rechten Seite auf Add, um diese beiden hinzuzufügen:
HTTP_X_Original_Host
HTTP_X_Real_IP
HTTP_X_Forwarded_SSL
Über diesen Webserver wird das MapEdit Mobile nur aufgerufen, dieser Server steht in der DMZ. Von hier aus werden die Anfrage weiter an den Applikationsserver geleitet. Auf dem Applikationsserver ist MapEdit Mobile mit dem WildFly konfiguriert.
Für die Web Konfigurationen gilt folgendes:
Auf dem WebServer sind die Umleitungen für mapedit-core, mapedit-web und TileServer definiert. In jedem dieser Ordner befindet sich eine entsprechende web.config
Web.config anpassen
Nachdem diese beiden Variablen hinzugefügt wurden, muss die web.config
des Servers angepasst werden. Diese befindet sich i.d.R. in dem Verzeichnis:
Bitte zuerst eine Sicherung der Datei machen.
Beispiel / Vorlagen
mapedit-core
<rules>
<!-- place this file in a folder named "mapedit-core" in "C:\inetpub\wwwroot\" folder -->
<rule name="ReverseProxyInboundMapEditCore" enabled="true" stopProcessing="true">
<match url="(.*)" />
<!-- adjust this URL to match WildFly server name and port -->
<action type="Rewrite" url="http://localhost:8080/mapedit-core/{R:1}" />
<serverVariables>
<!-- add this server variables in IIS to allowed server variables in URL Rewrite view -->
<set name="HTTP_X_Original_Host" value="{HTTP_HOST}" />
<set name="HTTP_X_Real_IP" value="{REMOTE_ADDR}" />
<set name="HTTP_X_Forwarded_SSL" value="{HTTPS}" />
</serverVariables>
</rule>
mapedit-web
<rule name="ReverseProxyInboundMapEditMobile" enabled="true" stopProcessing="true">
<match url="(.*)" />
<!-- adjust this URL to match WildFly server name and port -->
<action type="Rewrite" url="http://localhost:8080/MapEdit/{R:1}" />
<serverVariables>
<!-- add this server variables in IIS to allowed server variables in URL Rewrite view -->
<set name="HTTP_X_Original_Host" value="{HTTP_HOST}" />
<set name="HTTP_X_Real_IP" value="{REMOTE_ADDR}" />
<set name="HTTP_X_Forwarded_SSL" value="{HTTPS}" />
</serverVariables>
</rule>
TileServer
<rule name="ReverseProxyInboundTileServer" enabled="true" stopProcessing="true">
<match url="(.*)" />
<!-- adjust this URL to match WildFly server name and port -->
<action type="Rewrite" url="http://localhost:8080/TileServer/{R:1}" />
<serverVariables>
<!-- add this server variables in IIS to allowed server variables in URL Rewrite view -->
<set name="HTTP_X_Original_Host" value="{HTTP_HOST}" />
<set name="HTTP_X_Real_IP" value="{REMOTE_ADDR}" />
<set name="HTTP_X_Forwarded_SSL" value="{HTTPS}" />
</serverVariables>
</rule>
Das Prinzip kann man auch für WMS Abfragen verwenden um so die Angaben von Karten und Pfaden auf dem Server zu verbergen.
<rule name="ReverseProxyInboundRuleWMS" stopProcessing="true">
<match url="wms" />
<action type="Rewrite" url="http://servername/cgi-bin/mapserv.exe?&Map=c:%5Capp%5Cmaps%5Cwmskarte.map" />
<serverVariables>
<set name="HTTP_X_Original_Host" value="{HTTP_HOST}" />
<set name="HTTP_X_Real_IP" value="{REMOTE_ADDR}" />
</serverVariables>
</rule>
Externe WMS URL:
https://gis.kunde.de/wms?Request=GetCapabilities&Service=WMS&Version=1.3.0
Interne Server URL: http://servername/cgi-bin/mapserv.exe?Map=c:\app\maps\wmskarte.map
Optionale ausgehende Regel im IIS definieren:
Die installierten Module Application Request Routing und URL-Rewrite sind Vorraussetzung:
Wählen Sie hierzu Ihre Website im linken Bereich des IIS-Managers aus, hier ist es die Standardwebsite, öffnen Sie das URL-Rewrite -Modul.
Klicken Sie im rechten Bereich auf Regel hinzufügen.
Wählen Sie im nächsten Dialogfenster Reverse Proxy.
Als ausgehende Regel wird eingestellt, das alles was von http://localhost:8080
kommt auf die URL des IIS umgeleitet wird, in diesem Beispiel http://kundenname.mapedit.de/
web.config
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8080/(.*)" />
<action type="Rewrite" value="http{R:1}://kundenname.mapedit.de/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
Bei den von uns bereitgestellten Beispielen der `web.config´ müssen die URLs entsprechend der Installationsumgebung noch angepasst werden.
Index.html
Auch ist die index.html
definiert. Sie regelt den Aufruf von MapEdit Mobile aus dem www heraus.
Lautet die Bindung der Default Web Site z.B. mobile-kunde.mapedit.de
, so heißt die URL für MapEdit: https://mobile-kunde.mapedit.de
Beim Aufruf greifen die Definitionen aus der index.html
und aus den Umleitungen und es wird das Login für MapEdit Mobile aufgebaut. Falls die Umleitungen funktionieren, dann sind die installierten Versionen für Mapedit Web und MapEdit Core zu sehen. Stehen hier keine Versionsangaben sondern Fragezeichen, so funktionieren die Umleitungen nicht.