wsl 2 unbuntu 部署 asp.net core 使用 nginx 做反向代理,调试文件上传失败
2021-01-09 00:28
标签:说明 service mina ring cti 通过 html def 大小限制 继上一篇 asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权 的公司内部项目上线后发现文件上传功能有问题。 上传的文件超过50M以后前端就报错了,没有状态返回,也没有响应。只有浏览器 Console 里面能看到一条 50M以内的都能传输,第一反应肯定是配置或者参数限制了。因为是部署的Linux,然后 nginx 做反向代理,检查了代码,运行程序的方面的大小限制是已经解除了的。 然后就是nginx限制,让运维修改了大小限制,但是仍然不行。因为开发人员接触不到部署环境,运维又说配置已经修改了,最后只得我自己在本地模拟线上环境调试找问题了(本地测试使用的IIS部署)。 由于我机器安装了 wsl 2,所以准备用 wsl 2 来部署测试玩一玩,关于 wsl 2 的安装可以看这个 Windows10上安装Linux子系统(WSL2,Ubuntu),配合Windows Terminal使用 对于程序需要修改两个地方,一个是接口的请求大小限制,在方法上面打上 另外一个是kestrel服务器 一般本地测试环境 .NET Core 会使用预先安装运行时来部署,但是如果使用容器一般是自包含运行时的,所以使用独立方式部署走一波。 可以使用命令方式发布,有vs就直接操作下就行了。 右键发布,设置 wsl 安装 unbuntu 后,本地几个盘就已经挂载在了mnt下面。所以直接可以访问windows上的目录启动程序,这也是wsl方便的地方。 我们进入到程序的目录,然后执行主程序就行了。注意: 如果已经在程序所在目录了,执行时要加 ./ 然后 ./xxx 的形式才能执行。 不需要安装任何东西或者依赖,程序已经启动了。接下来我们安装 nginx 使用 apt-get 安装 Nginx。 安装完成后启动nginx nginx 默认使用的是80端口,但是我启动后提示端口被占用。由于 wsl 与 Windows 是共用端口。 查看 iis 配置了80端口站点,停掉 iis 后再启动还是占用,搜索是 SQL Server Reporting Services 服务停止后就可以了。 测试环境如果你不是非要用80端口,可以在配置里面将 nginx 端口改成其它的,以防常用端口冲突。 Nginx 配置为反向代理将请求转接到 ASP.NET Core 应用,修改配置 /etc/nginx/sites-available/default。 使用vim修改配置为如下,我修改了 nginx 的端口为5000 完成配置 Nginx 后,运行 上面的两步走完后,直接在 Windows 浏览器里面访问 http://localhost:5000 地址就行了,然后进行测试。 上传文件报 413 requset entity too large,但是 kestrel 并没有报错,所以将 nginx 配置 再次上传几百兆的文件都可以,当我上传 1.5G 的文件时又报了一个错误。 504 超时,修改配置 设置 配置修改后同上,需要运行 最后测试了 2G 以内各种大小的上传都能成功上传了。 我将本地的测试情况给运维说明了情况,起码保证了程序是没问题的,以及nginx会出问题的点。 当然线上环境比我这个测试环境复杂,还需要运维去排查(可能是配置没生效或者配置不对),我这儿只是分享简单的部署安装和找问题过程。 另外还有一个注意点: 部署后启动服务报 Microsoft.Data.SqlClient.dll 目标平台不支持。最后将运行时里面的复制替换到程序下面就没问题了,而且运行时里面的文件是1M多,生成的只有几百k。 这个是为什么?暂时我还不得而知,有没知道的道友,后续我找到原因会更新在文章中。 wsl 2 unbuntu 部署 asp.net core 使用 nginx 做反向代理,调试文件上传失败 标签:说明 service mina ring cti 通过 html def 大小限制 原文地址:https://www.cnblogs.com/SunSpring/p/13528664.htmlnet::ERR_CONNECTION_RESET
错误。接口和服务修改上传限制
[DisableRequestSizeLimit]
MultipartBodyLengthLimit
大小限制,Startup里面修改大小。独立方式部署
独立部署
模式,选择目标运行时 Linux-x64。nginx 安装和配置
sudo apt-get install nginx
sudo service nginx start
sudo vim /etc/nginx/sites-available/default
server {
listen 5000;
location / {
proxy_pass http://localhost:5004;
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;
}
}
sudo nginx -t
来验证配置文件的语法。 如果配置文件测试成功,通过运行 sudo nginx -s reload
重新加载。测试与发现问题
client_max_body_size
设置成 3000m。proxy_read_timeout
大小为 3600s,至于其它的一些 nginx 时间设置不用修改,比如网上有人修改链接超时时间什么的,其实没什么关系。sudo nginx -s reload
最后
文章标题:wsl 2 unbuntu 部署 asp.net core 使用 nginx 做反向代理,调试文件上传失败
文章链接:http://soscw.com/index.php/essay/41041.html