DotNet Applikation unter Apache

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

DotNet Applikation unter Apache

Andreas Tille-5
Hallo,

ich habe die Aufgabe, eine existierende dotNet 3.1 Applikation unter
Debian mit Apache als Proxy zum Laufen zu bringen.  Ich bin anhand der
unten aufgelisteten [Links] vorgegangen.  Damit läuft die dotNet
Applikation erstmal im Browser auf http://localhost:5000 .  Allerdings
wird nur der rohe Inhalt der Webseite dargestellt - Bilder auf die mit
/img/* verwiesen wird sowie CSS (in /css) werden nicht gefunden.

Ich habe in
   /etc/systemd/system/kestrel-helloapp.service
entsprechend [4] einen Eintrag

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/myapp.dll


angelegt.  Wenn ich dieses WorkingDirectory ändere, kommt unter
http://localhost:5000  gar nichts mehr.  Die Bilder liegen allerdings
im Verzeichnisbaum unter

    /var/www/myapp/wwwroot/img

Irgendwie muß man Apache und/oder kestrel also erklären, daß das
root-Directory dort ist.  Aber wie?

Vielen Dank für hilfreiche Hinweise

     Andreas.


[Links]

[1] https://docs.microsoft.com/de-de/dotnet/core/install/linux-package-manager-debian10
[2] https://docs.microsoft.com/de-de/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
[3] https://blog.todotnet.com/2017/07/publishing-and-running-your-asp-net-core-project-on-linux/
[4] https://docs.microsoft.com/de-de/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1

--
http://fam-tille.de

Reply | Threaded
Open this post in threaded view
|

Re: DotNet Applikation unter Apache

Hans-Georg Bork


Moin,

Am 1. April 2020 09:31:12 MESZ schrieb Andreas Tille <[hidden email]>:
>Allerdings
>wird nur der rohe Inhalt der Webseite dargestellt - Bilder auf die mit
>/img/* verwiesen wird sowie CSS (in /css) werden nicht gefunden.
>

hast du schon einen symlink probiert?
z.B. ln -s wwwroot/img img I'm myapp Verzeichnis

Gruß
        --hgb

--
Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.

Reply | Threaded
Open this post in threaded view
|

Re: DotNet Applikation unter Apache

Ulf Volmer
In reply to this post by Andreas Tille-5
On 01.04.20 09:31, Andreas Tille wrote:

> ich habe die Aufgabe, eine existierende dotNet 3.1 Applikation unter
> Debian mit Apache als Proxy zum Laufen zu bringen.  Ich bin anhand der
> unten aufgelisteten [Links] vorgegangen.  Damit läuft die dotNet
> Applikation erstmal im Browser auf http://localhost:5000 .  Allerdings
> wird nur der rohe Inhalt der Webseite dargestellt - Bilder auf die mit
> /img/* verwiesen wird sowie CSS (in /css) werden nicht gefunden.

Falls es eine valide Lösung sein sollte, den Apache die zwei
Verzeichnisse direkt ausliefern zu lassen, statt die an den kestrel
weiterzuleiten:

ProxyPass /css !
ProxyPass /img !

sorgt für eben das.

Sonst bin ich raus. ;-)

Viele Grüße
Ulf

Reply | Threaded
Open this post in threaded view
|

Apache als Reverse Proxy für DotNet Applikation (War: DotNet Applikation unter Apache)

Andreas Tille-5
Hallo,

On Wed, Apr 01, 2020 at 11:21:42PM +0200, Ulf Volmer wrote:
> On 01.04.20 09:31, Andreas Tille wrote:
>
> > ich habe die Aufgabe, eine existierende dotNet 3.1 Applikation unter
> > Debian mit Apache als Proxy zum Laufen zu bringen.  Ich bin anhand der
> > unten aufgelisteten [Links] vorgegangen.  Damit läuft die dotNet
> > Applikation erstmal im Browser auf http://localhost:5000 .

Also das Problem ist gelöst - der Dienst läuft jetzt auf

    http://localhost:5000

> > Allerdings
> > wird nur der rohe Inhalt der Webseite dargestellt - Bilder auf die mit
> > /img/* verwiesen wird sowie CSS (in /css) werden nicht gefunden.
>
> Falls es eine valide Lösung sein sollte, den Apache die zwei
> Verzeichnisse direkt ausliefern zu lassen, statt die an den kestrel
> weiterzuleiten:
>
> ProxyPass /css !
> ProxyPass /img !
>
> sorgt für eben das.

Es war ein anderes Problem (Verzeichnis am falschen Ort).
 
> Sonst bin ich raus. ;-)
 
Vielleicht bist Du bei einer eher reinen Apache-Frage wieder drin. :-)
Der Dienst unter http://localhost:5000 ist ja eigentlich der reine
dotNet Webservice.  Da schlägt ja Apache gar nicht zu.  Meine
/etc/apache2/conf.d/10-dotnet.conf sieht so aus:


# Setup apache2 as reverse proxy
#   https://docs.microsoft.com/de-de/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
#   Alternative:
#   https://blog.todotnet.com/2017/07/publishing-and-running-your-asp-net-core-project-on-linux/

Listen 4242

<VirtualHost *:*>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>

<VirtualHost *:4242>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ServerName host.my.local
    ServerAlias *.my.local
    ErrorLog ${APACHE_LOG_DIR}/dotnet-error.log
    CustomLog ${APACHE_LOG_DIR}/dotnet-access.log common
</VirtualHost>


In der Anleitung steht original

   <VirtualHost *:80>

drin.  Aber auf Port 80 will ich den Standardserver antworten lassen.
Daher habe ich nun mal einen neuen Port 4242 erfunden.  Der wird auch
aufgemacht:

# netstat -tuplen | grep -e dotnet -e apache
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      33         21791594   8173/dotnet        
tcp        0      0 127.0.0.1:5001          0.0.0.0:*               LISTEN      33         21791598   8173/dotnet        
tcp6       0      0 :::80                   :::*                    LISTEN      0          21944936   25352/apache2      
tcp6       0      0 :::4242                 :::*                    LISTEN      0          21944940   25352/apache2      
tcp6       0      0 ::1:5000                :::*                    LISTEN      33         21791597   8173/dotnet        
tcp6       0      0 ::1:5001                :::*                    LISTEN      33         21791599   8173/dotnet        


Wenn ich nun zu http://localhost:4242 gehe, dann zeigt der Browser
sofort

    http://localhost:5000

an und macht mit der (nun glücklicherweise laufenden) dotnet Anwendung
weiter und der Apache ist draußen.  Im log erscheint auch nur der eine
Zugriff.  Ich vermute, das hängt mit einem falschen Reverse-Proxy
zusammen - aber was genau ist da noch zu ändern?

Viele Grüße

        Andreas.

--
http://fam-tille.de

Reply | Threaded
Open this post in threaded view
|

Re: Apache als Reverse Proxy für DotNet Applikation (War: DotNet Applikation unter Apache)

Ulf Volmer
On 02.04.20 15:33, Andreas Tille wrote:

> Listen 4242
>
> <VirtualHost *:*>
>     RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
> </VirtualHost>
>
> <VirtualHost *:4242>
>     ProxyPreserveHost On
>     ProxyPass / http://127.0.0.1:5000/
>     ProxyPassReverse / http://127.0.0.1:5000/
>     ServerName host.my.local
>     ServerAlias *.my.local
>     ErrorLog ${APACHE_LOG_DIR}/dotnet-error.log
>     CustomLog ${APACHE_LOG_DIR}/dotnet-access.log common
> </VirtualHost>

Ich habe jetzt nicht im Detail verstanden, wozu der *:* VHost gut sein
soll. Würde ich im Zweifel rausnehmen. Ansonsten sieht das gut aus
(abgesehen davor, dass ich ungern .local TLDs sehe). Eigentlich sollte
das funktionieren.

> Wenn ich nun zu http://localhost:4242 gehe, dann zeigt der Browser

Mußt Du mit Deinem Setup nicht auf http://host.my.local:4242 gehen?

Viele Grüße
Ulf

Reply | Threaded
Open this post in threaded view
|

Re: Apache als Reverse Proxy für DotNet Applikation (War: DotNet Applikation unter Apache)

Markus Kolb-3
In reply to this post by Andreas Tille-5
Am 02.04.2020 15:33, schrieb Andreas Tille:

>
> Wenn ich nun zu http://localhost:4242 gehe, dann zeigt der Browser
> sofort
>
>     http://localhost:5000
>
> an und macht mit der (nun glücklicherweise laufenden) dotnet Anwendung
> weiter und der Apache ist draußen.  Im log erscheint auch nur der eine
> Zugriff.  Ich vermute, das hängt mit einem falschen Reverse-Proxy
> zusammen - aber was genau ist da noch zu ändern?

Musst Du dir mal mit z.B. wireshark oder developer console vom Browser
ansehen, was da genau passiert.
Könnte z.B. ein Redirect von der App sein.
Evt. stimmen auch die ganzen Links in der App nicht.
Kannst du evt. noch in der App konfigurieren wie die eigene Domain der
App sein soll?