从客户端接受HTTP协议,转发给上游服务器也是HTTP协议
模块:ngx_http_proxy_module,默认编译进nginx,使用--without-http_proxy_module禁用
功能:对上游服务使用http/https协议进行反向代理
1.proxy_pass 指令
语法:proxy_pass URL;
默认:空
放置位置:location,if in location,limit_except
URL 参数规则:
(1)URL必须以http://或者https://开头,接下来是 域名,IP,Unix socket地址或者upstream的名字,前两者可以在域名或者IP后加端口,最后是可选的URI
(2)当URL参数中携带URI与否,会导致发向上游请求的URL不同:
①不携带URI,则将客户端请求中的URL直接转发给上游。location后是用正则表达式,@名字时,应采用这种方式
②携带URI,则对用户请求中的URL作如下操作:将location参数中匹配上的一段替换为该URI
(3)该URL参数中可以携带变量
(4)更复杂的URL替换,可以在location内的配置添加rewrite break语句
1.proxy_method指令(GET请求,或者POST请求)
语法:proxy_method method;
默认:空
放置位置:http,server,location
2.proxy_http_version指令(使用keepalive时,需要改为1.1)
语法:proxy_http_version 1.0 | 1.1
默认:proxy_http_version 1.0;
放置位置:http,server,location
3.proxy_set_header 指令(修改或添加新的头部。若value的值为空字符串,则整个header都不会向上游发送)
语法:proxy_set_header field value;
默认:proxy_set_header Host $proxy_host; proxy_set_header COnnection close;
放置位置 :http,server,location
4.proxy_pass_request_headers指令(是否要把用户请求的头部发送给上游)
语法:proxy_pass_request_headers on | off;
默认:proxy_pass_request_headers on;
放置位置:http,server,location
5.proxy_pass_request_body指令(是否要把用户请求的body发送给上游)
语法:proxy_pass_request_body on | off;
默认:proxy_pass_request_body on;
放置位置:http,server,location
6.proxy_set_body指令
语法:proxy_set_body value;
默认:空
放置位置:http,server,location
1.proxy_request_buffering指令
语法:proxy_request_buffering on | off;
默认:proxy_request_buffering on;
放置位置:http,server,location
① on :客户端网速慢。上游服务并发处理能力低。适应高吞吐量场景
②off:更及时的响应。降低nginx读写磁盘的消耗。一旦开始发送内容,proxy_next_upstream功能失败
控制客户端包体的接收
2.client_body_buffer_size 指令
语法:client_body_buffer_size size;
默认:client_body_buffer_size 8k | 16k;
放置位置:http,server,location
3.client_body_in_single_buffer 指令
语法:client_body_in_single_buffer on | off
默认:client_body_in_single_buffer off;
放置位置:http,server,location
4.client_max_body_size指令(最大包体长度限制,仅对请求头部中含有Content-Lentgh有效超出最大长度后,返回413错误)
语法:client_max_body_size size;
默认:client_max_body_size 1M;
放置位置:http,server,location
临时文件的路径格式
5.client_body_temp_path指令(接收用户请求body的临时文件)
语法:client_body_temp_path path [level1 [ level2 [ level3 ] ] ](多级子目录,一个目录不能存放太多文件,存放太多文件,导致存取性能变差)
默认:client_body_temp_path client_body_temp;
放置位置:http,server,location
6.client_body_in_file_only 指令
语法:client_body_in_file_only on | clean | off;(on:用户的包体会一直存放在文件中。clean:用户上传的body会存放到文件中,请求处理完成删除)
默认:client_body_in_file_only off;(包体必须存放在文件中,可能会定位问题)
放置位置:http,server,location
7.clent_body_timeout 指令(读取包体超时,则返回408错误)
语法:clent_body_timeout time;
默认:clent_body_timeout 60s;
放置位置:http,server,location
1.proxy_connect_timeout 指令(控制握手时间)
语法:proxy_connect_timeout time;
默认:proxy_connect_timeout 60s;
放置位置:http,server,location
2.proxy_next_upstream指令(超时后,回想客户端生成http响应,响应码为502)
语法:proxy_next_upstream http_502 | ....;
默认:proxy_next_upstream error timeout
放置位置:http,server,location
3.proxy_socket_keepalive指令(上游连接启用TCP keepalive)
语法:proxy_socket_keepalive on | off
默认:proxy_socket_keepalive off
放置位置:http,server,location
4.keepalive指令(上游连接启用HTTPkeepalive,复用TCP连接)
语法:keepalive connections;
默认:空
放置位置:upstream
5.keepalive_requests指令(标识一个连接最多可以执行多少个请求)
语法:keepalive_requests numbers;
默认: keepalive_requests 100;
放置位置:upstream
6.proxy_bind 指令
语法:proxy_bind address [ transparent ] | off;
默认:空
放置位置:http,server,location
7.proxy_ignore_client_abort指令(当客户端关闭连接,是否关闭与上游服务器的连接)
语法:proxy_ignore_client_abort on | off
默认:proxy_ignore_client_abort off;
放置位置:http,server,location
8.proxy_send_timeout指令(定时器与操作时间)
语法:proxy_send_timeout time;
默认:proxy_send_timeout 60s;
放置位置:http,server,location
1.proxy_buffer_size 指令(接收上游的HTTP响应头部,限定了接收自上游的HTTPresponse header的最大值)
语法:proxy_buffer_size size;
默认:proxy_buffer_size 4k | 8k;
放置位置:http,server,location
2.proxy_buffers 指令(接收上游HTTP包体,如果内存能存放下,则不往磁盘中写入)
语法:proxy_buffers number size;
默认:proxy_buffer 8 4k | 8k;
放置位置:http,server,location
3.proxy_buffering 指令(尽快释放上游服务器的连接)
语法:proxy_buffering on | off;
默认:proxy_buffering on;
放置位置:http,server,location
4.proxy_max_temp_file_size 指令(限制写入磁盘中的最大值)
语法:proxy_max_temp_file_size size;
默认:proxy_max_temp_file_size 1024M;
放置位置:http,server,location
5.proxy_temp_file_write_size 指令(限制每一次向磁盘中写入的字节数)
语法:proxy_temp_file_write_size size;
默认:proxy_temp_file_write_size 8k | 16k;
放置位置:http,server,location
6.proxy_temp_path 指令(存放临时文件的目录)
语法:proxy_temp_path path [ level1 [ level2 [ level3 ] ] ];
默认:proxy_temp_path proxy_temp;
放置位置:http,server,location
7.proxy_busy_buffers_size 指令(及时转发包体,当接收到一部分时,先向客户端转发这部分响应)
语法:proxy_busy_buffers_size size;
默认:proxy_busy_buffers_size 8k | 16k;
放置位置:http,server,location
接收上游时网络相关指令
7.proxy_read_timeout 指令(两次读取最长操作时间)
语法:proxy_read_timeout time;
默认:proxy_read_timeout 60s;
放置位置:http,server,location
8.proxy_limit_rate 指令(限制读取上游的响应速度)
语法:proxy_limit_rate rate;
默认:proxy_limit_rate 0;(0代表不限制)
放置位置:http,server,location
上游包体的持久化
9.proxy_store_access 指令(把临时的包体对应的文件改名到最终目录下权限的配置方法)
语法:proxy_store_access users:permissions ....;
默认:proxy_store_access user:rw;
放置位置:http,server,location
10.proxy_store 指令(使用root指令改名到root对应的目录下)
语法:proxy_store on | off | string;
默认:proxy_store off;(不开启)
放置位置:http,server,location
禁用上游响应头部的功能
1.proxy_ignore_headers指令(某些响应头部可以改变nginx的行为,使用proxy_ignore_headers可以禁止它们生效)
语法:proxy_ignore_headers field ....;
默认:空
放置位置:http,server,location
转发上游的响应
2.proxy_hide_header 指令(对于上游响应中的某些头部,设置不向客户端转发)
语法:proxy_hide_header field;
默认:空
放置位置:http,server,location
3.proxy_pass_header 指令(对于被proxy_hide_header禁用的头部,设置允许向客户端转发)
语法:proxy_pass_header field;
默认:空
放置位置:http,server,location
修改返回的Set-Cookie头部
4.proxy_cookie_domain 指令(修改域名)
语法:proxy_cookie_domain off proxy_cookie_domain domain replacement;
默认:proxy_cookie_domain off
放置位置:http,server,location
5.proxy_cookie_path 指令(URL中的内容做替换)
语法:proxy_cookie_path off proxy_cookie_path path replacement;
默认:proxy_cookie_path off
放置位置:http,server,location
修改返回的location头部
6.proxy_redirect指令(URL中的内容做替换)
语法:proxy_redirect off proxy_redirect redirect replacement proxy_redirect default;
默认:proxy_redirect default
放置位置:http,server,location