You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Артур Дементьев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 12:44:49