如何排除 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 错误。未找到。天哪,我受够了,哈哈。这就是我现在的情况。我有一个配置文件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 不起作用但也许那是另一天的事了。

相关内容