none
[IIS 8.5] Weiterleitungen bzw. URL Rewrite mit ARR RRS feed

  • Frage

  • Hallo,

    während ich gerade dabei bin zu versuchen OwnCloud in einer virtuellen Maschine mit Linux zu installieren, habe ich mal eine andere Alternative probiert die auch auf Windows läuft - mit Namen Seafile.

    Seafile installiert aber anscheinend seinen eigenen Webserver.

    Allerdings habe ich halt diese Subdomain von Microsoft (https://mein-name.remotewebaccess.com) mit welcher der RemoteWebaccess von eminem Homeserver (Win Server 2012 R2 Datacenter mit den Essentials Features) erreichbar ist.

    Jetzt möchte ich Seafile über https://mein-name.remotewebaccess.com/cloud erreichen. Außerdem könnte ich so Seafile von außen mit SSL Verschlüsselung erreichen. Dazu habei ich auch bei den Foren von Seafile schon einiges gelesen - nach deren Anleitung habe ich im IIS eine neue Website erstellt, ARR und URL Rewrite installiert und dann folgende web.config erstellt:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
     <location path="" overrideMode="Deny">
     </location>
     <system.webServer>
     <security>
     <requestFiltering allowDoubleEscaping="true" />
     </security>
     <rewrite>
     <rules>
     <clear />
     <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
     <match url="(.*)" />
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
     <add input="{HTTPS}" pattern="^OFF$" />
     </conditions>
     <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
     </rule>
     <rule name="seafilehttp" stopProcessing="true">
     <match url="seafhttp/(.*)" />
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
     <action type="Rewrite" url="http://127.0.0.1:8082/{R:1}" appendQueryString="true" logRewrittenUrl="true" />
     </rule>
     <rule name="seafile" enabled="true" stopProcessing="true">
     <match url="(.*)" />
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
     <action type="Rewrite" url="http://localhost:8000/{R:1}" appendQueryString="true" logRewrittenUrl="true" />
     </rule>
     
     </rules>
     <outboundRules>
     <preConditions>
     <preCondition name="ResponseIsHtml1">
     <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
     </preCondition>
     </preConditions>
     </outboundRules>
     </rewrite>
     <httpErrors errorMode="DetailedLocalOnly" />
     </system.webServer>
    </configuration>

    Das funktioniert auch so. Ich kann nun Seafile über die neu erstellte website (bei der ich SSL mit port 446 und einem selbst erstellen/signierten zertifikat aktiviert hatte) erreichen, also mit https://mein-name.remotewebaccess.com:446 (wird umgeschrieben zu: https://mein-name.remotewebaccess.com:446/accounts/login?next=/)

    Jetzt habe ich aber versucht bei der Default Website ein virtuelles Unterverzeichnis mit den Namen "cloud" anzulegen und dort ebenfalls die web.config eingefügt (unverändert). Wenn ich jetzt aber https://mein-name.remotewebaccess.com/cloud eingebe, bekomme ich einen 404 Fehler und die URL wird zu https://mein-name.remotewebaccess.com/accounts/login?next=/ umgeschrieben.

    Ich gehe mal davon aus, dass ich etwas an der web.config verändern muss, damit seafile auch über https://mein-name.remotewebaccess.com/cloud erreichbar ist, oder? Aber was?

    Es wäre echt toll, wenn mir jemand da weiterhelfen kann!

    Danke und schöne Grüße.

    Mittwoch, 22. Juli 2015 13:32

Antworten

  • Hi,

    also bei mir funktioniert es mit folgender web.config im Unterordner "Cloud":

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <remove name="AddFolderName" />
                    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                        <match url="(.*)" />
                        <action type="Rewrite" url="http://interne.domain.tld/{R:1}" />
                        <serverVariables>
                            <set name="HTTP_ACCEPT_ENCODING" value="none" />
                        </serverVariables>
                    </rule>
                </rules>
                <outboundRules>
                    <rule name="AddFolderName" preCondition="ResponseIsHtml1" stopProcessing="true">
                        <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^(.*)" />
                        <action type="None" value="/Cloud/{R:1}" />
                        <conditions>
                            <add input="REQUEST_URI" pattern="^(/*)Cloud(.*)" negate="true" />
                        </conditions>
                    </rule>
                    <preConditions>
                        <preCondition name="ResponseIsHtml1">
                            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        </preCondition>
                    </preConditions>
                </outboundRules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    und folgender web.config im Root der Website (dient nur dazu, die Rückmeldungen auf /Login... abzufangen.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="AddFolderName" stopProcessing="true">
                        <match url="^(.*)" />
                        <action type="Redirect" url="/Cloud/{R:1}" redirectType="Found" />
                        <conditions>
                            <add input="REQUEST_URI" pattern="/Cloud(.*)" negate="true" />
                        </conditions>
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    Du müsstest in diesem Fall allerdings dafür sorgen, dass andere Unterordner, die dann andere Anwendungen ansprechen sollen, mind. diese web.config enthalten:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <remove name="AddFolderName" />
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Prof. Dr. Bob Donnerstag, 23. Juli 2015 16:37
    • Tag als Antwort aufgehoben Prof. Dr. Bob Freitag, 24. Juli 2015 16:31
    • Als Antwort markiert Prof. Dr. Bob Freitag, 24. Juli 2015 16:32
    Mittwoch, 22. Juli 2015 20:37
    Moderator
  • Hi,

    stimmt. Das müsste man noch erlauben. Schmeiß die betreffenden Zeilen:

    <serverVariables>
        <set name="HTTP_ACCEPT_ENCODING" value="none" />
    </serverVariables>

    bitte einfach aus der web.config rausnehmen oder geh in die IIS Management Konsole, wähle die betreffende Website aus, gehe zum Feature "UrlRewrite". Dort dann auf "Servervariablen anzeigen..." -> "Hinzufügen..." -> "HTTP_ACCEPT_ENCODING".


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Prof. Dr. Bob Freitag, 24. Juli 2015 16:32
    Donnerstag, 23. Juli 2015 08:00
    Moderator

Alle Antworten

  • Hi,

    das dürfte ein Problem der von dir verwendeten Drittanbieteranwendung sein. Die Umleitung wird anscheinend nicht auf den Ordner, sondern auf den Root der Website durchgeführt. Also nicht auf /cloud/accounts/login... sondern eben auf /accounts/login.... Schau mal, was der Hersteller dazu meint, wenn man dessen Anwendung (auch ohne ReverseProxy) in einem Unterordner ausführen lassen will.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. Juli 2015 13:52
    Moderator
  • Erstmal vielen Dank für die schnelle Antwort.

    Ich weiß jetzt nicht ob ich das richtig verstehe, aber damit das so klappt, müsste ich es irgendwie hinbekommen, dass ich seafile nicht standardmäßig über "http://servername:8000" erreiche, sondern über "http://servername:80000/cloud"?

    Ich glaube nicht dass das funktionieren wird, weil sich seafile wie schon gesagt ja quasi als eigenständiges programm installiert mit (anscheinend) einem eigenen webserver.

    Wenn das also nicht geht, gibt es keinen anderen Ausweg als es so wie bisher zu machen? Sprich ne neue Seite im IIS anlegen und da dann ARR konfigurieren, sodass ich seafiile immerhin über https erreiche, dann aber nur über "https://mein-name.remotewebaccess.com:446" (beispielport) und dann eben auch nur mit zertifikatfehler?

    Das wäre echt schade...

    Mittwoch, 22. Juli 2015 14:41
  • Hi,

    wie gesagt, ich sehe das Problem eher bei seafile, nicht beim IIS. Eine Option wäre, eine zweite Website mit einem eigenen Hostnamen im IIS einzurichten (bspw. cloud.mein-name.abc.tld) und dort den ReverseProxy zu aktivieren. Dann bist Du auch dort im Root der Website, das Problem mit dem Unterordner hast Du dann erstmal weg.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. Juli 2015 15:03
    Moderator
  • Tut mir leid, aber das verstehe ich jetzt nicht ganz...

    Wie ist das gemeint mit dem "eigenen Hostnamen"?

    Mittwoch, 22. Juli 2015 15:21
  • Hi,

    in einem IIS kann man ja mehrere Websites einrichten. Jede Website kann dabei über ihre Einstellungen einen (oder auch mehrere) eigenen Hostnamen erhalten. In der IIS Management Konsole ist das über die Bindungen der Website zu sehen.

    Aufgrund deiner Frage nehme ich aber mal an, dass Du mit dem IIS selbst gar nicht wirklich arbeitest!?

    Falls Du Remote Web Access über das Essentials Dashboard einrichtest, müsstest Du das ggfs. dort machen. Damit kenne ich mich aber nicht aus. Evtl. hilft dir das hier bei der Einrichtung einer zweiten Website.

      http://blogs.technet.com/b/sbs/archive/2014/05/07/configuring-and-customizing-remote-web-access-on-windows-server-2012-r2-essentials.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. Juli 2015 15:29
    Moderator
  • Okay, also:

    Doch ich arbeite schon "wirklich" mit dem IIS. Die Essentials Features habe ich nur installiert, um dieses Remotewebaccess auch benutzen zu können, und nur so bekommt nam ja auch die Subdomain von Microsoft inkl. gültigem ssl zertifikat.

    Sprich mit "https://mein-name.remotewebaccess.com" erreiche ich von aussen den RemotewebAccess, welches im IIS als "Default Website" eingerichtet ist.

    Wenn ich jetzt im IIS ne neue Seite erstelle, kann ich dieser unter "Bindungen" ja den Port 443 nicht mehr zuweisen. Ich könnte stattdessen z.B. Port 446 nehmen. Dann könnte ich da jene web.config Datei reinamchen und ich kann über https://mein-name.remotewebaccess.com:446/ Seafile erreichen. Achso natürlich muss ich noch ein selbst signiertes Zertifikat ausstellen und der Website zuweisen. Eigentlich wäre somit ja das Problem gelöst - Allerdings bekomme ich - aufgrund des selbst signierten Zertifikats - einen SSL Fehler (weil https://mein-name.remotewebaccess.com:446 ungleich https://mein-name.remotewebaccess.com ist).

    Darum hatte ich mir gedacht, es wäre schlau einfach bei der Default Website ein virtuelles Unterverzeichnis anzulegen und diesem dann eben jene web.config "zuzuweisen" (also in dessen physikalischen Pfad zu legen). Dann könnte ich Seafile nämlich über https://mein-name.remotewebaccess.com/cloud erreichen, ohne einen SSL-Fehler im Browser angezeigt zu bekommen, da die Subdomain von Microsoft ja mit einem gültigen SSL-Zertifikat ausgestattet ist.

    Leider ist das ja das eigentliche Problem, dass es so anscheinend nicht funktioniert.

    Mittwoch, 22. Juli 2015 15:47
  • Hi,

    doch, Du kannst problemlos mehrere SSL Sites in einem IIS betreiben. Nur darf dieselbe Bindung (Protokoll, Hostname, Portnummer) nicht zweimal vorkommen. Daher solltest Du der zweiten Website eben einen eigenen Hostnamen für die SSL Bindung verpassen. Falls Du nur dieses eine kostenlose Zeritifikat erhältst, wird das aber nicht funktionieren, da das kein Wildcard Zertifikat ist.

    Ich schau mal, ob man trotzdem mit dem Unterordner arbeiten kann, ggfs. kann man über die Outbound Regeln den Ordner immer mitgeben.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. Juli 2015 15:51
    Moderator
  • Hi,

    ja genau da liegt das Problem, dass ich nur dieses eine kostenlose (kein wildcard) zertifikat habe.

    Ja, danke, wäre toll wenn du da noch eine Lösung für finden kannst!

    Mittwoch, 22. Juli 2015 16:00
  • Hi,

    also bei mir funktioniert es mit folgender web.config im Unterordner "Cloud":

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <remove name="AddFolderName" />
                    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                        <match url="(.*)" />
                        <action type="Rewrite" url="http://interne.domain.tld/{R:1}" />
                        <serverVariables>
                            <set name="HTTP_ACCEPT_ENCODING" value="none" />
                        </serverVariables>
                    </rule>
                </rules>
                <outboundRules>
                    <rule name="AddFolderName" preCondition="ResponseIsHtml1" stopProcessing="true">
                        <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^(.*)" />
                        <action type="None" value="/Cloud/{R:1}" />
                        <conditions>
                            <add input="REQUEST_URI" pattern="^(/*)Cloud(.*)" negate="true" />
                        </conditions>
                    </rule>
                    <preConditions>
                        <preCondition name="ResponseIsHtml1">
                            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        </preCondition>
                    </preConditions>
                </outboundRules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    und folgender web.config im Root der Website (dient nur dazu, die Rückmeldungen auf /Login... abzufangen.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="AddFolderName" stopProcessing="true">
                        <match url="^(.*)" />
                        <action type="Redirect" url="/Cloud/{R:1}" redirectType="Found" />
                        <conditions>
                            <add input="REQUEST_URI" pattern="/Cloud(.*)" negate="true" />
                        </conditions>
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    Du müsstest in diesem Fall allerdings dafür sorgen, dass andere Unterordner, die dann andere Anwendungen ansprechen sollen, mind. diese web.config enthalten:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <remove name="AddFolderName" />
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Prof. Dr. Bob Donnerstag, 23. Juli 2015 16:37
    • Tag als Antwort aufgehoben Prof. Dr. Bob Freitag, 24. Juli 2015 16:31
    • Als Antwort markiert Prof. Dr. Bob Freitag, 24. Juli 2015 16:32
    Mittwoch, 22. Juli 2015 20:37
    Moderator
  • Vielen Dank für die Mühe!

    Ich werde mir das wahrscheinlich morgen einmal in Ruhe angucken und melde mich dann wieder.

    Mittwoch, 22. Juli 2015 21:29
  • Ich hab das mal probiert.

    Leider bekomme eich folgenden Fehler:

    HTTP-Fehler 500.50 - URL Rewrite Module Error.

    Das Festlegen der Servervariablen "HTTP_ACCEPT_ENCODING" ist nicht zulässig. Fügen Sie den Servervariablennamen der Liste der zulässigen Servervariablen hinzu.

    Donnerstag, 23. Juli 2015 00:28
  • Hi,

    stimmt. Das müsste man noch erlauben. Schmeiß die betreffenden Zeilen:

    <serverVariables>
        <set name="HTTP_ACCEPT_ENCODING" value="none" />
    </serverVariables>

    bitte einfach aus der web.config rausnehmen oder geh in die IIS Management Konsole, wähle die betreffende Website aus, gehe zum Feature "UrlRewrite". Dort dann auf "Servervariablen anzeigen..." -> "Hinzufügen..." -> "HTTP_ACCEPT_ENCODING".


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Prof. Dr. Bob Freitag, 24. Juli 2015 16:32
    Donnerstag, 23. Juli 2015 08:00
    Moderator
  • Hi,

    okay, done.

    Leider leider hab ich entweder etwas falsch gemacht oder es hat immernoch nicht funktioniert.

    Auf dem Server selbst bekomm ich jetzt komischerweise bei Eingabe von "https://homeserver/cloud" einen 404 Fehler vom IIS zurück. Er schreibt dabei übrigens die URL zu "https://homeserver/accounts/login?next=/" um.

    Bei Eingabe der selben Adresse von einem anderen PC im Heimnetz komm ich zwar auf die Startseite von Seafile, jedoch wird sie "kaputt" dargestellt, sprich er kann höchstwahrscheinlich das stylesheet nicht laden. Die URL wird dabei nicht(?) umgeschrieben, es steht also immernoch in der Adressleiste "https://homeserver/cloud". Auf dem was von der Seite dargestellt wird, gibt es auch links, z.B. zur Hilfe, hovert man über den Link, zeigt er als Ziel "https://homeserver/help/" an, klicke ich darauf, will er mich auch genau dahin weiterleiten, das gibt aber antürlich wieder nen 404 Fehler zurück.

    Edit: Vorsichtshalber nochmal die beiden web.config der Default Website und des Unterverzeichnisses "/cloud":

    Vom Unterverzeichnis:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <remove name="AddFolderName" />
                    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                        <match url="(.*)" />
                        <action type="Rewrite" url="http://192.168.178.254:8000/{R:1}" />
                        <serverVariables>
                            <set name="HTTP_ACCEPT_ENCODING" value="true" />
                        </serverVariables>
                    </rule>
                </rules>
                <outboundRules>
                    <rule name="AddFolderName" preCondition="ResponseIsHtml1" stopProcessing="true">
                        <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^(.*)" />
                        <action type="None" value="/Cloud/{R:1}" />
                        <conditions>
                            <add input="REQUEST_URI" pattern="^(/*)Cloud(.*)" negate="true" />
                        </conditions>
                    </rule>
                    <preConditions>
                        <preCondition name="ResponseIsHtml1">
                            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        </preCondition>
                    </preConditions>
                </outboundRules>
            </rewrite>
        </system.webServer>
    </configuration>

    Und bei der von der Default Website sei darauf hingewiesen, dass da natürlich schon eine existierte und ich nur das von dir da eingefügt habe:

    <?xml version="1.0"?>
    <!--
      <copyright file="Web.config" company="Microsoft">
        Copyright (C) Microsoft. All rights reserved.
      </copyright>
    -->
    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Wssg.Web.Internal" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
            <codeBase version="6.3.0.0" href="..\..\..\..\..\windows\system32\Essentials\Wssg.Web.Internal.dll"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      <system.web>
        <authentication mode="None" />
      </system.web>
      <location path="Robots.txt">
        <system.web>
          <authorization>
            <allow users="*"/>
          </authorization>
        </system.web>
        <system.webServer>
          <security>
            <authorization>
              <clear/>
              <add accessType="Allow" users="*"/>
            </authorization>
          </security>
        </system.webServer>
      </location>
      <location path="resources">
        <system.web>
          <authorization>
            <allow users="*"/>
          </authorization>
        </system.web>
        <system.webServer>
          <security>
            <authorization>
              <clear/>
              <add accessType="Allow" users="*"/>
            </authorization>
          </security>
    	    <rewrite>
                <rules>
                    <rule name="AddFolderName" stopProcessing="true">
                        <match url="^(.*)" />
                        <action type="Redirect" url="/Cloud/{R:1}" redirectType="Found" />
                        <conditions>
                            <add input="REQUEST_URI" pattern="/Cloud(.*)" negate="true" />
                        </conditions>
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
      </location>
    </configuration>
    

    Donnerstag, 23. Juli 2015 11:40
  • Hi,

    in der letzten web.config stehen die rewrite rules im <location path="resources"> Node. Das ist falsch. Stell das bitte noch um.

    Falls im Root der Website bereits eine Anwendung läuft, muss die auch in einen Unterordner, da aufgrund der Rewriteregel "AddFolderName" alles, was auf den Root geht, auf /Cloud/... umgeleitet wird.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 23. Juli 2015 13:10
    Moderator
  • Okay, tatsächlich funktioniert das jetzt.

    Allerdings bin ich mir jetzt recht unsicher, wie ich das was derzeit im Root der Website läuft, in einem Unterordner laufen lassen kann? Ich meine das ist ja nciht irgendwas oder igendeine von mir selbst erstellte Seite, sondern wie bereits erwähnt, die RemoteWebAccess Seite, die von Microsoft dort vorkonfiguriert wurde.

    Donnerstag, 23. Juli 2015 13:43
  • Hi,

    das kann ich dir nicht beantworten. In der Regel macht man das über eine eigene Website, da gibt es dieses Problem nicht. Aber das geht bei dir ja leider nicht.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 23. Juli 2015 15:29
    Moderator
  • /////Hinweis: Ich habe den gesamten Beitrag einmal komplett überarbeitet und neue Informationen hinzugefügt!/////

    Hi, sorry dass ich dich nochmal nerve, aber vielleicht funktioniert ja bald wirklich alles so wie ich will :D

    Ich habe nämlich mal versucht das Problem folgendermaßen zu lösen: 

    Ich habe einfach mal eine neue Website im IIS erstellt und dieser den Port 443 sowie das von MS ausgestellte Zertifikat gegeben. Der RemoteWebAccess hat jetzt von mir den Port 444 bekommen.

    Ich habe dann in das Root der neuen Seite die Web.config gelegt (die, wo du meintest die soll in den Root der Website). Dann habe ich ein Unterverzeichnis mit dem Namen "Cloud" angelegt und dort die entsprechende web.config von dir reingelegt. erwartungsgemäß funktioniert das jetzt auch. Bloß, will ich natürlich dann aber auch den RemoteWebaccess mit einem Unterverzeichnis ansprechen und nicht mit dem Port 444. Darum legte ich ein neues Unterverzeichnis "remacc" an und legte dort auch jene web.config ab - natürlich mit geändertem Port auf :444 (und bei der Adresse habe ich gleich ein https:// statt http:// davor gemacht) und den Namen habe ich natürlich auch von cloud auf remote angepasst.

    Während weiterhin der Zugriff auf Seafile mittels Aufruf von "https://homeserver/cloud" funktioniert, funktioniert aber der Aufruf des Remotewebaccess via "https://homeserver/remote" leider nicht - Das liegt daran, weil die Seite vom RemoteAccess bei ihrem aufruf auf das unterverzeichnis "remote" weiterleitet. Sprich wenn ich momentan im Browser "https://homeserver:444" eingebe, werde ich zu "https://homeserver:444/Remote/logon?ReturnUrl=%2fremote" weitergeleitet.
    Gebe ich nun "https://homeserver/remacc" ein, werde ich aber zu "https://homeserver/cloud/remote" weitergeleitet. Angezeigt wird mir dann eine Seite von Seafile, dass die Seite nicht gefunden werden konnte (also quasi ein 404 fehler von dem seafile-eigenen webserver).

    Und als wenn das nicht genug wäre, habe ich auch noch den PlexMediaserver installiert. Der installiert genau wie Seafile seinen eigenen Webserver und läuft unter Port 32400. Wenn ich schon dabei bin, dachte ich mir, leg ich mir für den auch noch ein Unterverzeichnis an, um darauf umzuleiten. Sollte dann so aussehen: https://homeserver/plex. Leider habe ich hier im Endeffekt das selbe Problem wie beim Remotewebaccess. Denn den Plex erreiche ich normalerweise so: "http://homeserver:32400/web" der einzige unterschied: beim remotewebaccess werde ich ja bei eingabe von "https://homeserver:444" gleich auf "https://homeserver:444/remote" weitergeleitet. So nicht bei Plex, wenn ich "http://homeserver:32400" eingebe, gibt mir plex nen 401 unauthorized zurück. Ich muss dann selber das "/web" hinten drann hängen. Warum Plex solches macht, und nicht gleich drauf weiterleitet, ist mir nicht bekannt, vllt. hat das ja sogar nen guten grund :D

    Jedenfalls bekomem ich nun durch Eingabe von "https://homeserver/plex" natürlich auch den 401 unauthorized von plex. und wenn ich wiederum das "/web" selbst drannhänge, werde ich wiederum auf "https://homeserver/cloud/web/index.html" umgeleitet und es gibt wieder ne seite von seafile mit nem 404 zu sehen (logisch)....

    Übrigens: Ich habe ich ein weiteres Unterverzeichnis erstellt mit einer einfachen HTML Datei drinne. Der Aufruf klappt einwandfrei (mittels https://homeserver/start).

    Irgendwelche Ideen? Oder komme ich mit dem Ansatz nicht weiter?

    Edit:

    Ich kann verstehen wenn man da jetzt nicht mehr durchblicken kann, darum heir nochmal zur Übersicht:

    Ich habe eine Seite im IIS erstellt, der habe ich den Port 443 und das Zertifikat von Microsoft zugeteilt. In meinem Dateisystem habe ich unter "D:\IIS-Folders" den Ordner "Main" angelegt, dieser dient als physischer Pfad der neuen Seite im IIS, die ich ebenfalls "Main" nannte.

    Dieser Seite habe ich nun folgende (virtuelle) Unterverzeichnisse hinzugefügt:

    - "start" mit dem physischen Pfad "D:\IIS-Folders\start". Beinhaltet eine HTML-Datei.

    - "cloud" mit dem physischen Pfad "D:\IIS-Folders\seafile". Beinhaltet die entsprechende web.config von dir.

    - "plex" mit dem physischen Pfad "D:\IIS-Folders\plex". Beinhaltet die entsprechende web.config von dir, aber natürlich entsprechend angepasst. Da Plex standardmäßig folgendermaßen aufgerufen werden muss, funktioniert das so nicht (siehe beschreibung von vorhin): http://homeserver:32400/web

    - "remacc" mit dem physischen Pfad "D\IIS-Folders\remacc". Beinhaltet die entsprechende web.config von dir, aber natürlich entsprechend angepasst. Funzt derzeit leider ebenfalls genauso schlecht wie der Aufruf von Plex. Siehe ebenfalls Beschreibung von oben.

    Hier vorsichtshalber (auch nochmal um den Überblick zu behalten) Details zu den Seiten, auf die mittels der Unterverzeichnisse umgeleitet werden soll:

    - Remotewebaccess von Micrsoft (im IIS): Normal ansprechbar über "https://homeserver:444/remote"

    - Seafile Server (eigenständiger Webserver): Normal ansprechbar über "http://homeserver:8000"

    - Plex Mediaserver (eigenständiger Webserver): Normal ansprechbar über "http://homeserver:32400/web"

    Vielleicht hast du da ja noch ne tolle Idee parat - ich würd mich riesig freuen!

    Darum an dieser Stelle nochmal ein großes DANKE für deine bisherige Hilfe!

    PS: Entschuldige bitte, dass der Beitrag so schlecht zu lesen ist. Ich hätte gerne zwischendrinne größere Absätze gehabt, das hätte beim Lesen sicherlich einiges erleichtert :D Leider macht "technet" aber diese größeren Absätze von selbst weg. Sieht so aus als würde das Forum/Technet/Microsoft nicht wollen, dass man größere Beiträge gut lesen kann :D
    Donnerstag, 23. Juli 2015 21:31