反向代理服务器的概念:
反向代理是指用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端。
Nginx反向代理服务器的特点:
Nginx具有很强的高并发高负载能力,其一般会配置为既使静态Web服务器也是反向代理服务器。当请求内容是静态文件时,Nginx作为静态Web服务器直接给予回应;当请求内容是动态文件,不适合Nginx处理时,Nginx会作为反向代理服务器将请求转发给上游服务器。
Nginx作为反向代理服务器时,当收到客户端的HTTP请求时,它不会立即转发到上游服务器,而是先把用户的请求(包括HTTP包体)完整地接收到Nginx所在服务器的磁盘或内存中,然后再向上游服务器发起连接,把缓存的客户端请求转发到上游服务器。(ps:Squid等反向代理服务器则是一边接收请求,一边转发到上游服务器)
这样的处理过程缺点是延长了一个请求的处理时间,并增加了用于缓存的磁盘或内存空间。而优点是降低了上游服务器的负载,使得压力尽量在Nginx反向代理服务器
之所以可以降低上游服务器的负载,原因在于:Nginx代理服务器与上游服务器之间一般是“内网”连接,搭有VPN专线,传输速度较快。这样使得Nginx代理服务器与上游服务器之间的转发速率非常高,也就是使得一个Client连接占用上游服务器的时间会非常短,极大地降低了上游服务器的并发压力。
Nginx反向代理服务器的配置:
(1)proxy_pass
使用语法:proxy_pass URL;
使用说明:此配置项指定Nginx要代理的服务器,URL可以是host或IP+端口号的形式。例如:
proxy_pass http://192.168.190.136:80
(2)proxy_method
使用语法:proxy_method method;
使用说明:此配置项表示转发时的协议方法名,如GET、POST等。例如:
proxy_method GET
(3)proxy_hide_header
使用语法:proxy_hide_header the_header;
使用说明:默认情况下,Nginx不转发HTTP头部中的Date、Server、X-Pad、X-Accel-*。使用该配置项可以任意地指定哪些HTTP头部字段不会被转发。例如:
proxy_hide_header Cathe-Control;
(4)proxy_pass_header
使用语法:proxy_pass_header the_header;
使用说明:此配置项与(4)相反,可以将原本禁止转发的HTTP头部字段变为允许转发。例如:
proxy_pass_header X-Pad;
(5)proxy_pass_request_headers
使用语法:proxy_pass_request_headers on|off;
使用说明:此配置项表示是否允许转发HTTP头部。例如:
proxy_pass_request_headers on;
(6)proxy_pass_request_body
使用语法:proxy_pass_request_body on|off;
使用说明:此配置项表示是否允许转发HTTP包体。例如:
proxy_pass_request_body on;
(7)proxy_next_upstream
使用语法:proxy_next_upstream [error|timeout|http_500|http_502|http_503|http_504|off];
使用说明:此配置项表示当一台上游服务器转发出错时,继续换一台上游服务器处理这个请求。默认情况下,一旦Nginx开始向Client发送响应包,之后过程中若出错则不允许换一台上游服务器继续处理。但是在某些情况下,允许在出错时选择换一台上游服务器继续处理,例如:
proxy_next_upstream http_503;