我正在建立一个使用asp.net core 3的网站,该网站托管在Debian 9服务器上,使用nginx作为反向代理。我遇到的问题是,当我在Visual Studio中本地运行应用程序时,我的POST请求可以工作,但是当我发布该应用程序并将其上传到我的服务器时,它们突然不再起作用了。
这是我用于测试的控制器:
public class TestController : Controller
{
[HttpPost]
public IActionResult Ping()
{
return Ok();
}
[HttpPost]
public IActionResult Echo(string message)
{
return Ok(message);
}
[HttpPost]
public IActionResult FormEcho([FromForm]string message)
{
return Ok(message);
}
}
我正在使用邮递员来测试这些端点。
Ping
:
Echo
:
FormEcho
:
通过该测试,我认为以某种方式在服务器上拒绝带有正文内容的发布请求。我还从日志中注意到,对于在服务器上返回400的请求,日志中没有任何内容,就好像该请求甚至没有到达我的应用程序一样。
为什么我的应用程序拒绝带有正文内容的发布请求?
编辑:
这是我在nginx中的配置:
server {
listen 443 ssl;
listen [::]:443 ssl;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
server_name 51.38.35.10;
error_log /var/log/nginx/error.log info;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
listen [::]:80;
server_name 51.38.35.10;
return 302 https://$server_name$request_uri;
}
如果ASP.NET Core应用程序甚至没有记录传入请求(而其他应用程序仍在工作),那么看来它实际上并没有获得任何传入请求。在这种情况下,可能是您的反向代理配置不允许这些请求传递到您的应用程序。
我通常通过nginx对ASP.NET Core应用程序使用以下配置:
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 $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
这也是官方ASP.NET Core文档的建议。
Connection
特别是设置不同的标头值Upgrade
似乎有些问题。我个人已经看到Upgrade
与Upgrade
WebSocket的HTTP标头一起使用时的值。
因此,调整nginx配置可能会解决您的问题。
注意 Connection keep-alive
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句