drc*_*row 7 .net apache reverse-proxy kestrel
在 Ubuntu 18.04 服务器中,我有 Apache(目前运行几个 PHP 站点没有问题)。现在我需要托管一个 .NET 应用程序 (v 3.1)。
按照本教程https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
如果我没记错的话,该应用程序正在运行
# sudo systemctl status kestrel-helloapp.service
? kestrel-helloapp.service - Example .NET Web API App
Loaded: loaded (/etc/systemd/system/kestrel-helloapp.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-03-10 15:27:21 UTC; 1h 33min ago
Main PID: 70301 (dotnet)
Tasks: 15 (limit: 4675)
CGroup: /system.slice/kestrel-helloapp.service
??70301 /usr/bin/dotnet /var/www/helloapp/NetTest.dll
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: info: Microsoft.Hosting.Lifetime[0]
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: Now listening on: http://localhost:5000
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: info: Microsoft.Hosting.Lifetime[0]
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: Now listening on: https://localhost:5001
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: info: Microsoft.Hosting.Lifetime[0]
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: Application started. Press Ctrl+C to shut down.
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: info: Microsoft.Hosting.Lifetime[0]
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: Hosting environment: Production
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: info: Microsoft.Hosting.Lifetime[0]
Mar 10 15:27:22 Clk-Dev-UbuntuApache-01 dotnet-example[70301]: Content root path: /var/www/helloapp
Run Code Online (Sandbox Code Playgroud)
我的 Apache 虚拟主机是这样定义的:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ServerAdmin webmaster@localhost
ServerName XXXX-api.AAAA.com.ar
ServerAlias www.XXXX-api.AAAA.com.ar
ErrorLog ${APACHE_LOG_DIR}/XXXX-api.error.log
CustomLog ${APACHE_LOG_DIR}/XXXX-api.access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
.service 内容是:
[Unit]
Description=Example .NET Web API App
[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/bin/dotnet /var/www/helloapp/NetTest.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=afiori
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
当我转到 XXXX-api.AAAA.com.ar 时,它会将我重定向到 XXXX-api.AAAA.com.ar:5001 并显示 ERR_CONNECTION_TIMED_OUT 错误
错误日志显示:
[Tue Mar 10 15:06:49.538374 2020] [proxy_http:error] [pid 47754] [client 152.171.888.888:60836] AH01114: HTTP: failed to make connection to backend: 127.0.0.1
[Tue Mar 10 15:08:38.802652 2020] [proxy:error] [pid 9643] (111)Connection refused: AH00957: HTTP: attempt to connect to 127.0.0.1:5000 (127.0.0.1) failed
[Tue Mar 10 15:08:38.802698 2020] [proxy_http:error] [pid 9643] [client 152.171.888.888:60899] AH01114: HTTP: failed to make connection to backend: 127.0.0.1, referer: http://XXXX-api.AAAA.com.ar
Run Code Online (Sandbox Code Playgroud)
我在这里有点迷失(我什至不是 .NET 开发人员,我的技能是 PHP)
小智 0
所以,我遇到了同样的问题,但我终于找到了解决方案......这很困难,特别是因为微软没有编写适当的文档。
基本上,如果您从 Apache 获得重定向,则意味着 Apache 工作已完成并且反向代理正在工作。不起作用的实际上是 Kestrel。
我跑了
dotnet run
Run Code Online (Sandbox Code Playgroud)
在我的 raspbian 机器上的项目中。然后我发现该进程正在LOOPBACK(localhost,127.0.0.1)上运行。这意味着,该站点只能从系统内部访问,而不能远程访问。
我相应地编辑了我的launchSettings.json,替换
(如果您不想远程访问您的开发机器,您可以省略编辑 launchSettings.json)
"applicationUrl": "https://localhost:5001;http://localhost:5000"
Run Code Online (Sandbox Code Playgroud)
和
"applicationUrl": "https://*:5001;http://*:5000"
Run Code Online (Sandbox Code Playgroud)
然后我还编辑了我的服务文件,在现有环境变量旁边添加了一个新的环境变量(您可以在服务文件中包含多个环境变量):
Environment=ASPNETCORE_URLS=https://*:5001;http://*:5000
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
919 次 |
最近记录: |