多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
缓冲相关 Nginx默认有缓冲设计,因为客户端往往有很大的不同的连接速度。我们可以用以下指令调节缓冲行为。可以在HTTP,server或 location位置来设置。重要的是要记住,大小size指令是针对每个请求配置的,所以增加超出你需求会影响你的性能,如果这时有许多客户端请求: proxy_buffering 默认为on 指令控制缓冲是否启用 当Proxybuffer启用之后,Nginx服务器首先尽可能从被代理服务器哪里接收响应数据,放置在proxy buffer中,buffer的大小有proxy_buffer_size和proxy buffers指定决定,如果在接收过程中,发现buffer没有足够的大小来接收一次响应数据,nginx服务器会将接收到的数据临时存放到磁盘的临时文件中,磁盘上的临时文件路径可以通过proxy_temp_path指令进行设置,临时文件的大小有proxy_max_temp_file_size指令决定,一次响应数据接收完成后,nginx服务器在向客户端传输数据 1、proxy_buffers number size Syntax: proxy_buffers number size; Default: proxy_buffers 8 4k|8k; Context: http, server, location 该指令控制代理响应缓冲区的数量(第一个参数)和大小(第二个参数) 该指令用于配置接收一次被代理服务器响应数据的个数和每个buffer的大小 2、proxy_buffer_size 语法: proxy_buffer_size size 默认值 proxy_buffer_size 4k |8k 作用: 该指令设置缓冲区大小,从后端服务器取得的第一部分的响应内容,会存放到这里。小的响应 header通常位于这里 常见问题: 1) nginx buffer 设置太小,如果 URL 比较长导致 504 错误的故障 3、proxy_buffering 语法: proxy_buffering on|off 默认值: proxy_buffering on 上下文: http, server, location 作用: 这个参数用来控制是否打开后端响应内容的缓冲区,如果这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。 但是无论proxy_buffering是否开启,对proxy_buffer_size都是生效的。 proxy_buffering开启后,nginx会把后端返回的内容先放到缓冲区,然后在返回给客户端(边收边传) 如果响应内容无法放到内存里,会被写到磁盘上 如果proxy_buffering关闭,nginx立即把从后端接收到响应内容传送给客户端,每次取得 4、 proxy_temp_path path [Level 1 [ Level 2 [ Level 3]]] 案例; ![](https://box.kancloud.cn/e3ab9399ee63cb3da138beb77263bab0_949x189.png) proxy_max_temp_file_size #size 该离职用于配置所有临时文件的总体大小,存放在磁盘上临时文件大小不能超过该配置值 案例: proxy_max_temp_file_size 1024; proxy_temp_file_write_size: 该指令用于配置同时写入临时文件的数据量的总大小, 一般设置为8k或16k。 案例: proxy_buffer_size 256k; #代理请求缓冲区,会保存用户的头信息以供nginx进行处理 proxy_buffers 4 256k; #同上,告诉nginx保存单个用几个buffer最大用多少空间 proxy_busy_buffers_size 256k; #如果系统很忙时候可以申请最大proxy_buffers proxy_temp_file_write_size 256k; #proxy缓存临时文件的大小 location /bbs/ { proxy_pass http://server; proxy_set_header host $Host; proxy_buffering on; proxy_buffers 8 4k; proxy_buffer_size 4k; proxy_temp_path /var/tmp/nginx/buffer 1 2; proxy_max_temp_file_size 1024; } 三、proxy_pass 语法:Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except 案例: location /name/ { proxy_pass http://127.0.0.1/remote/; } location /some/path/ { proxy_pass http://127.0.0.1; } location /name/ { proxy_pass http://127.0.0.1$request_uri; } 注意: 1、如果location采用了模式匹配 ~ ~*, 该url会直接补在后面 比如 location ~* /test/a.html { proxy_pass http://10.100.100.2 } 代理服务器会把/test/a.html直接补在后面 http://10.100.100.2/test/a.html 2、如果加了rewrite,会把重写后的地址,直接补在后面 四、proxy_set_header Syntax: proxy_set_header field value; Default: proxy_set_header Host $proxy_host; proxy_set_header Connection close; Context: http, server, location 案例: proxy_set_header Host $host:$proxy_port; proxy_set_header Host $host; If the value of a header field is an empty string then this field will not be passed to a proxied server: proxy_set_header Accept-Encoding ""; 五、设置一个临时文件的 Syntax: proxy_max_temp_file_size size; Default: proxy_max_temp_file_size 1024m; Context: http, server, location 第二部分: proxy_ssl相关的 ![](https://box.kancloud.cn/62fe2ffb404f64e59743e4706151e6ba_413x271.png) 案例: proxy_set_header Client-Cert $ssl_client_cert; # 将客户端证书放到http头中传递给后端的tomcat proxy_ssl_certificate localhost.pem; # 如果后端的tomcat也要求客户端认证,则nginx与tomcat建立连接时会把该证书发送给tomcat proxy_ssl_certificate_key localhost.key; proxy_ssl_trusted_certificate chain.pem; # 如果启用了proxy_ssl_verify,则使用该文件中的CA公钥验证后端tomcat的证书 proxy_ssl_verify on; # nginx是否验证后端tomcat的证书 proxy_ssl_verify_depth 2; 第三部分:超时时常 1、 proxy_connect_timeout time; 默认为60s 代理服务器连接到后端服务器的超时时间(与upstream服务器的连接超时时间) 2、proxy_send_timeout 默认为60s 该指令配置nginx服务向后端被代理服务器发出write请求后,等待响应的超时时间 3、proxy_read_timeout 该指令配置nginx服务器向后端被代理服务器发出read请求后,等待响应的超时时间 默认为60s 4、proxy_send_timeout 这个指定设置了发送请求给upstream服务器的超时时间 默认为60s