
Als Hinweis: Ich habe diese Frage auf Webmaster StackExchange und ServerFault gestellt und beide Male wurde sie geschlossen. Auf ServerFault wurde ich hierher umgeleitet.
Ich habe mir den Kopf zerbrochen, weil ich versucht habe, herauszufinden, warum das nicht funktioniert. Ich arbeite zum ersten Mal mit Apache und CentOS. Dies ist für eine Hobby-Website, die mir beim Ausbau meiner Fähigkeiten helfen soll.
Folgendes versuche ich zu tun: Ich habe eine ASP.NET Core-Anwendung auf dem Server eingerichtet. Die Dateien befinden sich in /var/www/myapp
. Ich habe einen Dienst dafür eingerichtet und er läuft und funktioniert auf Port 5000. Ich kann per cURL darauf zugreifen und die richtige Antwort erhalten:
curl -H 'Content-Type: application/json' -X POST -d '<json>' http://127.0.0.1:5000/graphql
Jetzt möchte ich mit dieser Anwendung über einen Reverse-Proxy in meiner Domäne interagieren können. Ich habe zunächst die Microsoft-Dokumentation dazu befolgt:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
Das hat bei mir nicht funktioniert, also habe ich angefangen, eine Menge zu recherchieren, und bin einfach verloren. Egal, was ich mache, ich bekomme 404-Fehler. Nicht gefunden. Gott, ich habe das satt, lol. Hier ist, wo ich gerade stehe. Ich habe einen Konfigurationsdateinamen myapp.conf
in /etc/apache2/conf.d
:
<VirtualHost *:80>
ServerName <domain>.com
ServerAlias *.<domain>.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ErrorLog /etc/apache2/logs/myapp-error.log
CustomLog /etc/apache2/logs/myapp-access.log common
</VirtualHost>
Ich weiß, dass meine Konfigurationsdatei angezeigt wird:
apachectl -S | grep myapp
*:80 <domain>.com (/etc/apache2/conf.d/myapp.conf:1)
Ich weiß, dass die Proxy-Module aktiviert sind:
httpd -M | grep proxy
proxy_module (shared)
proxy_fcgi_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)
Wenn ich versuche, sie sicherheitshalber trotzdem manuell zu laden, meldet Apache, dass sie bereits aktiviert sind und überspringt sie. Ich weiß auch, dass meine Konfiguration in Ordnung ist:
apachectl -t
Syntax OK
Ich benutzeSchlaflosigkeitum den Reverse-Proxy zu testen. So sieht ein Austausch aus:
* Preparing request to http://<domain>.com/graphql
* Using libcurl/7.69.1 OpenSSL/1.1.1g zlib/1.2.11 brotli/1.0.7 libidn2/2.1.1 libssh2/1.9.0 nghttp2/1.40.0
* Current time is 2020-06-27T01:22:57.448Z
* Disable timeout
* Enable automatic URL encoding
* Enable SSL validation
* Enable cookie sending with jar of 1 cookie
* Too old connection (488 seconds), disconnect it
* Connection 46 seems to be dead!
* Closing connection 46
* Trying <ip_address>:80...
* Connected to <domain>.com (<ip_address>) port 80 (#47)
> POST /graphql HTTP/1.1
> Host: <domain>.com
> User-Agent: insomnia/2020.2.2
> Content-Type: application/json
> Accept: */*
> Content-Length: 343
| <json>
* upload completely sent off: 343 out of 343 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Sat, 27 Jun 2020 01:22:57 GMT
< Server: Apache
< Content-Length: 315
< Content-Type: text/html; charset=iso-8859-1
* Received 315 B chunk
* Connection #47 to host <domain>.com left intact
Nach allem, was ich gelesen habe, gibt es keinen Grund, warum ich diese 404-Fehler bekommen sollte. Übrigens habe ich Dutzende und Dutzende verschiedener Möglichkeiten ausprobiert, jede Anweisung in der Konfigurationsdatei zu konfigurieren. Ich werde es gerne noch einmal machen, wenn Sie Vorschläge haben.
Ich habe versucht, herauszufinden, ob es eine Möglichkeit gibt, eine Anfrage mit Ihrem Apache-Setup zu testen und einfach zu sehen, wie Apache die Anfrage weiterleitet. Es wäre also nett, wenn das jemand wüsste.
Antwort1
Nach vielem Herumprobieren bin ich also zu dem Schluss gekommen, dass das Problem darin liegt, dass meine virtuelle Hostdefinition erst nach der Standarddefinition in httpd.conf verarbeitet wurde. Als ich die virtuelle Hostdefinition so geändert habe, dass sie auf der IP-Adresse des Servers statt auf der IP-Adresse des Servers lauscht *:80
, hat es funktioniert.
<VirtualHost *:80>
...
</VirtualHost>
to
<VirtualHost <my-server-ip-address>:80>
...
</VirtualHost>
Ich würde gerne herausfinden, warum *:80 nicht funktioniert, aber das ist vielleicht etwas für einen anderen Tag.