我试图在Linux上首次托管我的Angular / ASP.net core 3.1应用程序。
Nginx站在端口80上,并提供静态文件,并充当将传递到.NET / kestrel服务器的api部分的反向代理。
问题是,我在包含正文的任何Web API请求上都系统地收到400状态代码错误(错误请求),例如POST&PUT,但GET没问题。
我通过中间件添加了一些日志,只是看我是否能收到请求。基本上是这样的:
app.Use(async (context, next) => {
context.Request.EnableBuffering();
string reqBody;
using (var reader = new StreamReader(context.Request.Body))
{
reqBody = await reader.ReadToEndAsync();
context.Request.Body.Seek(0, SeekOrigin.Begin);
ms_oLogger.Debug($"Incoming request: METHOD={context.Request.Method} PATH={context.Request.Path} BODY=\"{reqBody}\"");
}
await next();
});
这只是记录GET请求的内容,但对于有问题的PUT / POST请求却什么也没有出现... 我是否可以得出结论,这只是nginx问题?
我还为给定的“ / api”位置启用了nginx上的日志,但我不知道会发生什么... 我怎么知道哪个层已生成400状态代码?
EDIT1:我只用一个不良的Web API项目开始了一个空白的新项目,该项目包含一个GET和一个POST方法,只是为了检查我的应用程序是否存在问题,但仍然遇到问题。因此,我设置了新的ubuntu服务器(这次是ubuntu服务器,而不是台式机版本),现在它可以工作了!!!我比较了配置等...但无法弄清楚出了什么问题!....但是我最初的问题仍然有效:如何解决问题的出处?
EDIT2:这是我的default.conf:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location /fusion {
root /opt/fichet/WebUI/NgApp;
}
location /fusion/api {
proxy_pass http://localhost:5000/api;
error_log /var/log/nginx/fusion_error_logs.log debug;
access_log /var/log/nginx/fusion_access.log;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
似乎没有启用防火墙(“ sudo ufw status verbose”告诉我们它是“无效”)
从nginx配置中删除这些行。