Ich arbeite mit einer .NET Core-App, die als systemd-basierter Dienst auf einer von Azure gehosteten VM läuft, auf der NGINX läuft. (Die VM ist als Entwicklungsumgebung in Betrieb genommen). Ich habe einen A-Eintrag mit Azure DNS eingerichtet, der auf die Server-IP verweist. Wenn ich den angegebenen Hostnamen ( myapplication.mycompany.com
) in den Browser eingebe, wird die NGINX-Willkommensseite angezeigt:
Wenn ich eine URL eingebe, von der ich erwarte, dass sie die Versionsnummer der Anwendung zurückgibt, wird eine 404-Fehlermeldung angezeigt:
myapplication.mycompany.com/version.txt
Wenn ich ausführe systemctl status myservicename
, sehe ich, dass der .NET Core-Dienst gestartet ist und dass der Hauptdienst wie folgt ausgeführt wird:
CGroup: /system.slice/myservicename.service
└─...PID... /usr/bin/dotnet /var/aspnetcore/myservicename/myservice.dll
Wenn ich dann hineinschaue /var/aspnetcore/myservicename/wwwroot
, sehe ich die Dateiversion.txt
curl -v localhost:5000
gibt ein zurück 302 found
, das besagt Server: Kestrel
, also ichglaubendass Kestrel den Dienst auf Port 5000 bereitstellt
Wenn ich mir die NGINX-Konfiguration auf demProduktionVM (ein sehr ähnliches Image, auf dem eine vergleichbare Instanz des .NET Core-Dienstes läuft) sehe ich nichts, das darauf hindeutet, dass es eine spezielle Verbindung zu Kestrel herstellt. Ich schaue mir die NGINX-Konfiguration an, indem ich Folgendes verwende:
cat /etc/nginx/nginx.conf
cat /etc/nginx/conf.d
(diese Dateien sehen identisch aus wie die auf der Entwicklungs-VM)
Wo muss ich nachsehen, um die Konfiguration für das Weiterleiten von Anfragen an die .NET Core-App zu ermitteln? Und gibt es irgendetwas Offensichtliches, das bei meiner Anfrage die 404-Fehlermeldung verursachen könnte ...hostname.../version.txt
?
AKTUALISIEREN
Ich habe herausgefunden, dass /etc/nginx/sites-available/default
sich auf dem NGINX-Webserver einige der Haupteinstellungen befinden. Daher habe ich eine Einstellung für den Servernamen hinzugefügt, die meinem Hostnamen entspricht.
server {
listen 80;
server_name myapplication.mycompany.com;
Bei meinem Besuch myapplication.mycompany.com/version.txt
erhalte ich immer noch die Meldung 404
:
Antwort1
Ich habe herausgefunden, dass es zwei Konfigurationsdateien gibt, die die Verfügbarkeit einer Website bestimmen:
/etc/nginx/sites-available/default
/etc/nginx/sites-enabled/default
Für beide ist eine ähnliche Routingkonfiguration erforderlich, um die Websites zu ermitteln, die auf dem NGINX-Server verfügbar und aktiviert sind:
Beide Konfigurationsdateien legen den Port (80) fest, den NGINX zum Abhören von Anforderungen verwendet, und legen den Servernamen fest, der den Azure DNS-Hostnamen mit dem NGINX-Webserver verknüpft:
server {
listen 80;
server_name myapplication.mycompany.com;
Die Konfiguration bestimmt auch, wie Anfragen per Reverse-Proxy (also „weitergeleitet“) an Kestrel weitergeleitet werden, wo die Anfragen dann von der App über das .NET Core MVC-Routing verarbeitet werden.
location / {
... cacheing stuff
proxy_pass <http://localhost:5000;>