公司后台要做大文件上传想到的。
在http里上传的文件是以二进制形式存放在post请求的body里的,那么nginx是接受完整个post再发送给fastcgi吗?还是和fastcgi建立完连接就直接塞过去?
如果是前者的话,所谓的上传超时是nginx的超时?毕竟本地的fastcgi应该是很快的才对。
如果是后者的话,那nginx本身有控制post大小的设置,它是如何保证post大小的,content-length?
公司后台要做大文件上传想到的。
在http里上传的文件是以二进制形式存放在post请求的body里的,那么nginx是接受完整个post再发送给fastcgi吗?还是和fastcgi建立完连接就直接塞过去?
如果是前者的话,所谓的上传超时是nginx的超时?毕竟本地的fastcgi应该是很快的才对。
如果是后者的话,那nginx本身有控制post大小的设置,它是如何保证post大小的,content-length?
15 回答8.4k 阅读
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
超时有两种情况:
1、Nginx与fastcgi通信超时
Nginx与后端PHP通过fastcgi协议通信,会有超时时间设置,从请求连接建立,到指定时间一次请求还没完成,就会超时。
Nginx超时配置一般有:
2、PHP脚本执行超时
当Nginx通过fastcgi连接到后端的php-fpm后,后面要执行PHP脚本,如果脚本执行时间过长。比如,文件太大,网速太慢,导致PHP执行时间超过了预设时间。
PHP执行超时时间一般是:
max_execution_time
,可以通过set_time_limit(20);
语法设置超时时间。POST
数据时,请求体的长度确实是由Content-Length
来控制的。Nginx会先解析请求头,找到请求体的长度,之后接受指定长度的内容。如果你写代码实现post请求,将content-length设置一个比较小的数字,会发现,接收方接受的数据会被截断。