nginx反向代理

反向代理

反向代理图示

优势
1.隐藏真实服务器
2.便于横向扩充后端动态服务
3.动静分离,提升系统健壮性

动静分离

动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性

使用Nginx作为反向代理时支持的协议

nginx支持的协议

用于定义上游服务的upstream模块

解释:默认已被编译进nginx,禁用需要通过--with-http_upstream_module
语法:upstream name { ... }
默认值:无
上下文:http

1.server
语法:server address [ parameters ];
默认值:无
上下文:upstream


parameters可选值

2.keepalive
解释:限制每个worker子进程与上游服务器空闲长连接的最大数量
语法:keepalive connections;
上下文:upstream
示例:keepalive 16;

3.keepalive_requests
解释:单个长连接可以处理的最多HTTP请求个数
语法:keepalive_requests number;
默认值:keepalive_request 100;
上下文:upstream

4.keepalive_timeout
解释:空闲长连接的最长保持时间
语法:keepalive_timeout time;
默认值:keepalive_timeout 60s;
上下文:upstream

5.queue(只有在nginx专业版上可用)
语法:queue number [timeout=time];
默认值:无
上下文:upstream
示例::queue 100 timeout=30s;

upstream back_end {
        server 127.0.0.1:8080 weight=3 max_conns=1000 fail_timeout=10s;max_fails=2;
        keepalive 32;
        keepalive_requests 50;
        keepalive_timeout 30s;
}

http_proxy模块

1.proxy_pass指令
解释:由http_proxy模块提供(ngx_http_proxy_module),默认已被编译进nginx,禁用需要通过--without-http_proxy_module
语法:proxy_pass URL;
默认值:无
上下文:location, if, limit_except
示例一:proxy_pass http://127.0.0.1:8080
示例二:proxy_pass http://127.0.0.1:8089/proxy
URL参数原则
-URL必须以http或https开头
-URL中可以携带变量
-URL中是否带URI,会直接影响发往上游请求的URL

upstream back_end {
        server 192.168.184.20:8080
}
server {
        listen 80;
        server_name localhost;
        location /proxy {
                proxy_pass http://back_end/proxy;
        }
}

proxy_pass用法常见误区
-proxy_pass代理的URL后面到底加不加/?
1.不带/意味着Nginx不会修改用户URL, 而是直接透传给上游的应用服务器
2.带/意味着Nginx会修改用户URL, 修改方法:将location后的URL传递给上游服务器

location /bbs/ {
        proxy_pass http://127.0.0.1:8080;
}
#用户请求的URL:/bbs/abc/test.html
#请求到达Nginx的URL:/bbs/abc/test.html
#请求到达上游应用服务器的URL:/bbs/abc/test.html
#如果proxy_pass http://127.0.0.1:8080/,则请求到达上游应用服务器的URL为/abc/test.html

代理场景下Nginx接收用户请求包体的处理方式

解释:接收包体有两种方式,一种是接受完全部包体再发送到上游服务器,一种是一边接收包体一边发送
1.proxy_request_buffering on | off;
默认值:on
上下文:http, server, location
含义:是否开启缓存区域,开启后会接收完全部包体再发送到上游服务器。
适应场景:吞吐量要求高,上游服务并发处理能力低。如果不开启,则响应更及时,可以减少Nginx的磁盘IO

2.client_max_body_size size;
默认值:1M;
上下文:http, server, location
含义:Nginx可以处理的请求体的大小,超过大小则返回错误

3.client_body_buffer_size size;
默认值:8k | 16k (分别对应32位和64位系统)
上下文:http, server, location
含义:缓存区域的大小,如果请求体小于缓存区域,直接放在内存中,如果大于缓存区域,就放在文件中。

4.client_body_in_single_buffer on | off;
默认值:off;
上下文:http, server, location
含义:是否把文件放在一个连续的内存空间中,效率更高

5.client_body_temp_path path [ level1 ] [level2 ] [level3]
默认值:client_body_temp;
上下文:http, server, location
含义:请求体大于缓存区域,在磁盘中的存放路径

6.client_body_in_file_only on | clean | off;
默认值:off;
上下文:http, server, location
含义:请求体是否只放在文件中储存,clean和on意思一样,但是样,但是会在请求完成后清除文件。

7.client_body_timeout time;
默认值:60s;
上下文:http, server, location
含义:连接成功后,长时间没有请求会在指定时间关闭连接

代理场景下Nginx如何更改发往上游的用户请求

1.proxy_method method;
默认值:无
上下文:http, server, location
含义:修改请求的方法

2.proxy_http_version 1.0 | 1.1;
默认值:1.0;
上下文:http, server, location
含义:修改请求的http版本,注意1.0不支持keepalive方法

3.proxy_set_header field value;
默认值:proxy_set_header Host $proxy_host;
proxy_set_header Conncetion close;
上下文:http, server, location
含义:修改请求头参数,注意,要想打开keepalive,需要注定指定Connction为keepalive

4.proxy_pass_request_header on | off;
默认值:on;
上下文:http, server, location
含义:是否传递请求头信息

5.proxy_set_body value;
默认值:无
上下文:http, server, location
含义:设置请求体信息

6.proxy_pass_request_body on | off;
默认值:on;
上下文:http, server, location
含义:是否传递请求体信息

代理情景下Nginx与上游服务器建立连接细节

1.proxy_connect_timeout time;
默认值:60s;
上下文:http, server, location
含义:nginx与上游服务器建立长连接的时间

2.proxy_socket_keepalive on | off;
默认值:off;
上下文:http, server, location
含义:是否打开socket长连接

3.proxy_send_timeout time;
默认值:60s;
上下文:http, server, location
含义:建立连接后在指定时间没有发送请求关闭连接

4.proxy_ignore_client_bort on | off;
默认值:off;
上下文:http, server, location
含义:当连接关闭时是否停止处理请求

你可能感兴趣的:(nginx反向代理)