Как устранить неполадки обратного прокси-сервера Apache?

Как устранить неполадки обратного прокси-сервера Apache?

В качестве предупреждения: я задавал этот вопрос на Webmaster StackExchange и ServerFault, и оба раза он был закрыт. На ServerFault меня перенаправили сюда.

Я схожу с ума, пытаясь понять, почему это не работает. Это мой первый опыт работы с Apache и CentOS. Это для хобби-сайта, чтобы помочь мне развить свои навыки.

Вот что я пытаюсь сделать: у меня есть приложение ASP.NET Core, настроенное на сервере. Файлы находятся в /var/www/myapp. У меня есть настройка службы для него, и она запущена и работает на порту 5000. Я могу сделать cURL к нему и получить правильный ответ:

curl -H 'Content-Type: application/json' -X POST -d '<json>' http://127.0.0.1:5000/graphql

Теперь я хочу иметь возможность взаимодействовать с этим приложением через обратный прокси-сервер на моем домене. Я начал с того, что следовал документации Microsoft по этому поводу:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1

Это не сработало для меня, поэтому я начал проводить кучу исследований, и я просто потерялся. Независимо от того, что я делаю, я получаю ошибки 404. Not Found. Боже, как мне это надоело lol. Вот где я сейчас нахожусь. У меня есть имя файла конфигурации myapp.confв /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>

Я знаю, что мой файл конфигурации виден:

apachectl -S | grep myapp

*:80                   <domain>.com (/etc/apache2/conf.d/myapp.conf:1)

Я знаю, что прокси-модули включены:

httpd -M | grep proxy

 proxy_module (shared)
 proxy_fcgi_module (shared)
 proxy_http_module (shared)
 proxy_wstunnel_module (shared)

Когда я пытаюсь загрузить их вручную, просто чтобы быть уверенным, Apache говорит мне, что они уже включены, и пропускает их. Я также знаю, что моя конфигурация в порядке:

apachectl -t

Syntax OK

я используюБессонницадля проверки обратного прокси. Вот как выглядит обмен:

* 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

Исходя из всего, что я прочитал... нет никаких причин, по которым я должен получать эти 404. Кстати, я перепробовал десятки и десятки различных способов настройки каждой директивы в файле конфигурации. Я с радостью сделаю все это снова, если у вас есть предложения.

Одна вещь, которую я пытался выяснить, но не смог, это есть ли способ протестировать запрос на вашей настройке Apache и просто посмотреть, как Apache маршрутизирует запрос. Так что было бы неплохо, если бы кто-нибудь знал.

решение1

Итак, после многих проб и ошибок, я думаю, что проблема в том, что мое определение виртуального хоста просто обрабатывалось после определения по умолчанию в httpd.conf. Когда я изменил определение виртуального хоста, чтобы прослушивать IP-адрес сервера, а не *:80, это сработало.

<VirtualHost *:80>
  ...
</VirtualHost>

to

<VirtualHost <my-server-ip-address>:80>
  ...
</VirtualHost>

Мне бы хотелось выяснить, почему *:80 не работает, но, возможно, это тема для другого раза.

Связанный контент