【发布时间】:2018-02-12 17:27:46
【问题描述】:
这是我的第一个 DotNetCore 2.0 应用程序,我想用它来比较 IIS/Windows 和 nginx/Ubuntu 之间的性能。它是一个与多个服务(mongo/redis/session state)对话以创建虚假但真实的用户旅程的应用程序。
当我从 Visual Studio 调试或从 PostMan 调用时,应用程序在 Windows 上运行得非常好,但如果我部署到 Ubuntu,尽管我可以访问网站的首页和下一页(都是 GET),尽快当我在第二页(只有一个字段)上发布表单时,它从浏览器和邮递员失败,显示 400 但没有详细信息。 Ubuntu 没有记录除了 Web 服务器启动之外的任何内容,尽管它之前记录了错误,因此记录工作正常。
我什至尝试了IgnoreAntiforgeryToken 的操作,但没有帮助。
相关配置:
public void ConfigureServices(IServiceCollection services)
{
if (Configuration.GetValue<bool>("useFileSystem"))
{
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(Configuration.GetValue<string>("fileSystemPersistPath")))
.SetApplicationName("Perftest2018");
}
else
{
services.AddDataProtection()
.SetApplicationName("Perftest2018");
}
services.AddMvc();
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(30);
options.Cookie.HttpOnly = true;
});
services.Configure<IISOptions>(options =>
{
options.AutomaticAuthentication = false;
});
//<snip> the rest of my services
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseDeveloperExceptionPage();
app.UseStaticFiles();
app.UseSession();
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseMvc(routes =>
{
routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");
});
}
动作是这样的:
[HttpPost]
public async Task<IActionResult> Authorize(AuthorizeViewModel model)
{
// The view model just has a single string property with no other attributes
}
【问题讨论】:
-
400 表示错误请求,即您提出的请求错误。你确定
nginx没有直接拒绝吗? -
因为之前应用程序抛出时,它在我的错误日志中记录了错误?它会抛出并杀死日志输出吗?可能,但这并不能解释为什么它不起作用。 nginx 没有拒绝它,它是 dotnetcore 的代理,其他页面都在工作。
-
看另一个问题,是否可能与通过 HTTP 而不是 HTTPS 在某处阻止 POST 有关?我可以看到如何启用它,但不是默认情况下在任何地方启用它。
-
您是否缺少 POST 方法中的 [FromBody] 装饰器?
标签: ubuntu nginx asp.net-core asp.net-core-2.0