ASP.NET Core WebApi配置Kestrel后NET MAUI客户端无法连接求助
问题概述
我有一个ASP.NET Core WebApi应用已部署到真实服务器,后端用Nginx做反向代理,希望Android端NET MAUI客户端能通过http://myserveraddress/controllerheader或http://mydomain/controllerheader访问。原本在http://localhost:5000上所有请求正常,修改配置后出现连接被拒绝错误,怀疑服务器Unit或Nginx配置有误——Nginx欢迎页正常,已安装所有.NET包,控制台本地测试请求正常,但MAUI客户端无法与API通信。
当前配置文件
launchSettings.json
{"profiles": {"http": {"commandName": "Project","launchUrl": "api/meetman","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"},"dotnetRunMessages": true,"applicationUrl": "http://localhost:5000"},"https": {"commandName": "Project","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Prodaction"},"dotnetRunMessages": true,"applicationUrl": "https://meetos.ru"},"Kestrel": {"commandName": "Project","launchUrl": "https://meetos.ru","Endpoints": {"Http": {"Uri": "http://meetos.ru","applicationUrl": "http://83.166.246.51:5000"},"Https": {"Uri": "https://meetos.ru","applicationUrl": "https://83.166.246.51:5000"}},"applicationUrl": "https://meetos.ru"}},"$schema": "https://json.schemastore.org/launchsettings.json"}
测试请求文件
@APIMeetman_HostAddress = http://83.166.246.51:5000 GET {{APIMeetman_HostAddress}}/api/meetman/getall Accept: application/json ### POST {{APIMeetman_HostAddress}}/api/meetman Content-Type: application/json {"Iname": "Aleksandr","Sname": "Mahov","Tname": "@mahov","Phnumb": "+79000000000","Location": "Russia","Datebirth": "01011900","Email": "dev@meetos.ru","IsMan": "1","IsWooman": "0"} ### PUT {{APIMeetman_HostAddress}}/api/meetman/44 Content-Type: application/json {"meetmanId":44,"iname": "Alexader","sname": "MAHOV","tname": "@update","phnumb": "+79000000000","location": "Russia","datebirth": "01011900","email": "dev@meetos.ru","isMan": "1","isWooman": "0"} ### DELETE {{APIMeetman_HostAddress}}/api/meetman/43 Content-Type: application/json ###
错误信息
由于目标计算机积极拒绝,无法建立连接。(83.166.246.51:5000)
排查与解决方案
1. 修正Kestrel监听配置
launchSettings.json的Kestrel配置存在错误,需让Kestrel监听服务器所有网卡(而非仅绑定域名或特定IP),同时修正环境变量拼写错误:
"Kestrel": { "commandName": "Project", "launchUrl": "api/meetman", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Production" }, "dotnetRunMessages": true, "applicationUrl": "http://0.0.0.0:5000" }
2. 配置Nginx反向代理
创建或修改Nginx站点配置(路径示例:/etc/nginx/sites-available/meetos.conf),确保请求转发到Kestrel端口:
server { listen 80; server_name meetos.ru 83.166.246.51; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } }
执行以下命令生效配置:
sudo nginx -t # 检查语法 sudo systemctl reload nginx # 重启Nginx
3. 调整服务器防火墙规则
无需对外暴露5000端口(由Nginx转发),仅开放80/443端口:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw deny 5000/tcp # 禁止外部直接访问5000端口
4. 检查Unit服务配置
确保.NET应用的Systemd服务配置正确(路径示例:/etc/systemd/system/meetman-api.service):
[Unit] Description=Meetman ASP.NET Core API [Service] WorkingDirectory=/var/www/meetman-api ExecStart=/usr/bin/dotnet /var/www/meetman-api/YourApi.dll Restart=always RestartSec=10 User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production Environment=ASPNETCORE_URLS=http://0.0.0.0:5000 [Install] WantedBy=multi-user.target
执行以下命令重启服务:
sudo systemctl daemon-reload sudo systemctl restart meetman-api.service sudo systemctl status meetman-api.service # 确认服务运行正常
5. 修改测试请求地址
测试时使用域名或服务器IP(不带端口),例如:
@APIMeetman_HostAddress = http://meetos.ru GET {{APIMeetman_HostAddress}}/api/meetman/getall
内容的提问来源于stack exchange,提问作者Артур Дементьев
相关产品推荐
相关产品推荐

