
Como aviso: hice esta pregunta en Webmaster StackExchange y ServerFault y en ambas ocasiones se cerró. En ServerFault me redirigieron aquí.
Me he vuelto loco tratando de descubrir por qué esto no funciona. Esta es la primera vez que trabajo con Apache y CentOS. Esto es para un sitio web de pasatiempos que me ayudará a desarrollar mis habilidades.
Esto es lo que intento hacer: tengo una configuración de aplicación ASP.NET Core en el servidor. Los archivos están en /var/www/myapp
. Tengo una configuración de servicio para ello y se está ejecutando y funcionando en el puerto 5000. Puedo acceder a él y obtener la respuesta adecuada:
curl -H 'Content-Type: application/json' -X POST -d '<json>' http://127.0.0.1:5000/graphql
Ahora quiero poder interactuar con esta aplicación a través de un proxy inverso en mi dominio. Comencé siguiendo la documentación de Microsoft sobre esto:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
Eso no funcionó para mí, así que comencé a investigar un montón y estoy perdido. No importa lo que haga, recibo errores 404. Extraviado. Dios, estoy harto de eso jajaja. Aquí es donde estoy ahora mismo. Tengo un nombre de archivo de configuración myapp.conf
en /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>
Sé que se está viendo mi archivo de configuración:
apachectl -S | grep myapp
*:80 <domain>.com (/etc/apache2/conf.d/myapp.conf:1)
Sé que los módulos proxy están habilitados:
httpd -M | grep proxy
proxy_module (shared)
proxy_fcgi_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)
Cuando intento cargarlos manualmente de todos modos solo para estar seguro, Apache me dice que ya están habilitados y los omite. Sé que mi configuración también está bien:
apachectl -t
Syntax OK
Estoy usandoInsomniopara probar el proxy inverso. Así es como se ve un intercambio:
* 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
Según todo lo que he leído... no hay ninguna razón por la que deba obtener estos 404. Por cierto, he probado docenas y docenas de formas diferentes de configurar cada directiva en el archivo de configuración. Con mucho gusto lo haré todo de nuevo si tienes sugerencias.
Una cosa que he estado tratando de descubrir pero no he tenido éxito es si hay una manera de probar una solicitud con su configuración de Apache y simplemente ver cómo Apache enruta la solicitud. Así que sería bueno si alguien lo supiera.
Respuesta1
Entonces, después de muchas pruebas y errores, creo que el problema es que mi definición de host virtual recién se estaba procesando después de la predeterminada en httpd.conf. Cuando cambié la definición del host virtual para escuchar en la dirección IP del servidor en lugar de en *:80
, funcionó.
<VirtualHost *:80>
...
</VirtualHost>
to
<VirtualHost <my-server-ip-address>:80>
...
</VirtualHost>
Me gustaría descubrir por qué *:80 no funciona, pero quizás eso quede para otro día.