提醒一下:我曾在 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 不起作用但也许那是另一天的事了。