使用 proxypass 从 apache2 访问 localhost

Accessing localhost from apache2 with proxypass

所以我对其中的很多东西都很陌生,但我正在尝试构建一个网络服务器来托管我自己的网站。目前 运行 正在 Ubuntu 20.04 从我桌上的一个 raspberry pi 发送。

我已经完成了从服务器获取我的 .net 5 网络应用 运行ning 的所有步骤。然而,当我尝试通过 http://192.168.1.14 I get an odd 307 redirect and it redirects me to https://192.168.1.14:5001 访问该站点时。当然我也遇到了无法访问站点的错误。

我有我的站点 .conf 文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName BuildItWithDan
    ServerAlias www.BuildItWithDan
    DocumentRoot /var/www/BuildItWithDan
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log common
</VirtualHost>

当我 运行 我的 .net 5 应用程序时,我可以看到它加载并正确收听。

ubuntu@ubuntu:~$ /home/ubuntu/dotnet-64/dotnet /var/www/BuildItWithDan/BuildItWithDan.Web.dll

info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[62]
      User profile is available. Using '/home/ubuntu/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/ubuntu

因此,当导航到 http://192.168.1.14 时,我可以在我的服务上看到一些 ping。

info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://192.168.1.14/ - -
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://192.168.1.14/ - - - 307 0 - 38.2497ms
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://192.168.1.14/ - -
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://192.168.1.14/ - - - 307 0 - 1.6625ms

也许是值得注意的事情。如果我删除(或注释掉).conf 文件中的 ProxyPass 行,我就可以使用 http://192.168.1.14 连接到服务器,但它只会给我一个目录列表。 然后,如果我更改我的 DocumentRoot 路径 DocumentRoot /var/www/html 这将加载默认的 apache 站点,使用相同的 http://192.168.1.14

我还有 运行 sudo a2enmod proxy proxy_http 以及其他几个我想不到的。

Module proxy already enabled
Considering dependency proxy for proxy_http:
Module proxy already enabled
Module proxy_http already enabled

如有任何帮助,我们将不胜感激!

编辑:我能够从日志中找到这些。

[Tue Mar 23 21:35:45.053007 2021] [proxy:error] [pid 19685:tid 281472865419664] (111)Connection refused: AH00957: HTTP: attempt to connect to 127.0.0.1:5000 (127.0.0.1) failed
[Tue Mar 23 21:35:45.053198 2021] [proxy_http:error] [pid 19685:tid 281472865419664] [client 80.82.77.192:57200] AH01114: HTTP: failed to make connection to backend: 127.0.0.1

你不需要

ProxyPreserveHost On

除非您的应用程序需要特定的主机名 (localhost)。

您的 .net 应用程序正在侦听本地主机:

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001

如果您在 *:5000 和 *:5001 上绑定您的 .net 应用程序,事情可能会更容易。

您发布的错误意味着代理无法连接到 127.0.0.1:5000,这通常意味着应用程序没有 运行 或响应。如果您从浏览器连接到 http://127.0.0.1:5000,您应该会收到类似的错误。您首先需要解决此问题(与 apache 无关),然后设置代理通道。