Nginx代理Windows Server上IIS站点出现NS_ERROR_NET_PARTIAL_TRANSFER部分传输故障求助
你遇到的这个NS_ERROR_NET_PARTIAL_TRANSFER问题确实挺闹心的——只在Nginx代理Windows Server系列的IIS站点时触发,直接访问IP或者用Windows 10上的IIS就完全正常,说明问题大概率出在Nginx和Windows Server IIS的交互逻辑上。结合你的排查情况,给你几个针对性的解决方向:
调整Nginx代理的缓冲与连接参数
Windows Server的TCP/IP栈和Nginx默认的代理参数可能存在兼容性问题,试试在Nginx的location配置里添加这些参数:location / { proxy_pass http://你的IIS服务器IP; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_buffering on; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; }开启缓冲能避免Nginx和IIS之间的连接过早中断,HTTP/1.1配合空
Connection头可以复用连接,减少因频繁断开重连导致的部分传输失败。检查Windows Server的TCP与IIS响应设置
- 调整TCP Keep-Alive参数:打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,新建或修改两个DWORD值:KeepAliveTime设为十进制30000(30秒)、KeepAliveInterval设为十进制1000(1秒),重启服务器后生效。这个设置能让TCP连接保持更稳定,避免被过早回收。 - 检查IIS的响应标头:如果IIS里强制设置了
Connection: close,会导致每次请求都断开连接,很容易触发部分传输问题,找到这个标头并删除即可。
- 调整TCP Keep-Alive参数:打开注册表编辑器,定位到
深挖日志找线索
- 临时开启Nginx的debug日志(注意别长期开,影响性能),在nginx.conf里修改:
查看日志里有没有连接断开、传输中断的详细报错,能帮你定位是Nginx主动断开还是IIS那边出了问题。error_log /var/log/nginx/error.log debug; - 查看IIS的日志(默认路径
C:\inetpub\logs\LogFiles),检查失败请求的状态码、响应长度,确认IIS是否完整处理了请求。
- 临时开启Nginx的debug日志(注意别长期开,影响性能),在nginx.conf里修改:
尝试更换Nginx版本或代理配置
有些特定版本的Nginx和Windows Server的TCP栈兼容性不佳,试试升级到最新稳定版或者降级到之前的成熟版本。另外,确保Nginx的proxy_pass配置里加上proxy_set_header Host $host;,避免IIS因收到错误的Host头而返回不完整的响应。排查网络层限制
虽然你已经关了防火墙和Defender,但可以检查服务器上有没有第三方安全工具在后台运行,或者所在网络的交换机、路由器有没有开启TCP分段限制、MTU值过小的情况——试试把服务器的MTU改成1400(默认一般是1500),测试是否能解决问题。
备注:内容来源于stack exchange,提问作者Dylan D

