反向代理: web reverse proxy
proxy_pass URL 设置后端服务器的协议和地址.
请求的URI按照下面的规则传送给后端的服务器:
1 如果proxy_pass使用了uri,当传送请求到后端服务器时候,规范化之后的请求路径与配置中的路径的匹配部分将被替换为指令定义的URI.
location /name/ {
proxy_pass http://192.168.0.1/emna/;
}
http://www.magedu.com/name/index.html =>
http://www.magedu.com/emna/index.html
location /name/ {
proxy_pass http://192.168.0.1/; 注意后面的/
}
http://www.magedu.com/name/index.html =>
http://192.168.0.1/index.html
2 如果proxy_pass没有使用URI,传送到后端服务器的请求的URI就是客户端发起的请求的URI,如果nginx内部改变了请求URI,那么传送到URI是nginx改变之后的完整的URI.
location /name/ {
proxy_pass http://192.168.0.1;
}
http://www.magedu.com/name/index.html =>
http://192.168.0.1/name/index.html
注意: 在一下的情况中,proxy_pass指令是不能添加自己的URI.
1 location 匹配路径的时候使用了正则表达式.
location ~ ^/name {
proxy_pass http://192.168.0.1;
}
2 在代理的过程中使用了rewrite指令.
location /name {
rewrite ^/name/(.*) /age/$1
proxy_pass http://192.168.0.1;
}
---------------------------------------
proxy_set_header name value; 允许重新定义或者添加发往后端服务器的请求头信息.
默认情况下有2个参数的值会改变:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
注意:如果我们定义的值为空,那么是不会传递给后端的服务器的.
proxy_set_header Host '';
----------------------------------------
proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
对后端服务器响应中的Location: 和 Refresh:响应头替换文本.
proxy_redirect off; 表示不做处理
proxy_redirect http://localhost/two/ http://localhost/one/;
如果Location: http://localhost/two/some/uri将被改变为:
Location: http://localhost/one/some/uri
proxy_redirect default;使用location 和 proxy_pass执行的参数做匹配:
location /one/ {
proxy_pass http://localhost/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://localhost/two/;
proxy_redirectr http://localhost/two/ http://localhost/one/;
}
以上2个是等价的自己理解.
-----------------------------------------------------
proxy_send_timeout time;
定义向后端服务器传输请求的超时时间,该时间表示相邻两次写操作之间的最长的时间间隔,而不是整个请求的时间,如果后端服务器在超时时间段内没有接受到任何数据,那么连接断开.
-----------------------------------------------------
proxy_read_timeout time;
定义从后端服务器读取响应的超时,该时间是指相邻两次读操作之间的最大的时间间隔,而不是整个响应传输完成的时间,如果后端服务器在超时时间段内没有传输任何的数据,那么连接关闭.
-----------------------------------------------------
proxy_connect_timeout time;
设置与后端服务器建立连接的超时时间,应该注意这个时间一般不会超过75s
------------------------------------------------------
proxy_buffering on | off; 代理的时候,开启或关闭缓存后端服务器响应
------------------------------------------------------
proxy_temp_path path [level1 [level2 [level3]]];
定义从后端服务器接受的临时文件的存储路径,可以为临时文件定义之多3层子目录.该参数的值在编译的时候就可以指定 --http-proxy-temp-path=/var/tmp/nginx/proxy/
proxy_tmp_path /var/tmp/nginx/proxy/ 1 2;
1 表示建立一级子目录并且目录名是一个字符
2 表示建立二级子目录并且目录名是两个字符
------------------------------------------------------
proxy_buffers number size;
为每一个连接设置缓冲区的数量为number,每块缓冲区的大小是size,这些缓冲区保存从被代理服务器读取的响应,每块缓冲区的默认等于一个内存也的大小.
------------------------------------------------------
proxy_busy_buffers_size size;
当开启缓冲响应的功能的时候,在没有读取到全部响应的时候,写换红达到一定的大小之后,nginx会向客户端发送响应,该指令就是定义这个值的
-------------------------------------------------------
proxy_max_temp_file_size size;
打开后端服务器响应缓冲之后,如果整个响应的数据不能存储在内存缓冲中,
那么部分响应的数据可以存储临时文件中,整个指令设置临时文件的最大容量.
如果设置为0表示关闭将后端服务器响应的数据写入临时文件中
-------------------------------------------------------
proxy_temp_file_write_size size;
在开启缓冲后端服务器响应到临时文件的功能后,设置nginx每次写数据到临时文件的大小的限制.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^负载均衡^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
负载均衡 Load Balancing :(后端服务器的健康状况监测):
upstream name { ... }
定义一个服务器组,而且这些服务器可以监听在不同的端口.
upstream backend {
server ......
server .....;
.....
}
----------------------------------
server address [params];
定义服务器组中的一台服务器和其他参数, 注意不能使用http
server 192.168.0.1:80;
params:
weight=N 设定服务器的权重 默认是1
max_fails=N 设定Nginx与服务器通信的尝试失败的次数,在fail_timeout这个时间段内,如果失败的次数达到了这个值,Nginx被认为服务器是不可用的.默认是1
fail_timeout=time 统计失败次数的时间段,在这个时间段内,服务器失败的次数达到指定的尝试次数,服务器就被认为是不可用的.默认值10秒
backup 标记为默认的服务器,就是在所有的后端服务器down机之后才启用的服务器.
------------------------------------------
ip_hash 指定负载均衡的算法 这个指令可以确保来自同一个客户端的请求定位到同一个服务器.
-----------------------------------------
least_conn 指定负载均衡的算法,最少连接算法默认是weight round robin
---------------------------------------
upstream backend {
server 192.168.0.1 weight=1 fail_timeout=10 max_fails=2;
server 192.168.0.2 weight=1 fail_timeout=10 max_fails=2;
.......
server 127.0.0.1 backup;