正向代理

客户端访问的目标服务明确,但是无法直接访问,需要通过代理服务器跳转,才可以访问。结构图如下:

正向代理典型应用,如我们日常的翻墙操作,访问google网站,在浏览中设置代理服务器。在nginx中配置示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒
# 其他配置省略

#正向代理
server {
resolver 114.114.114.114; #dns服务器
listen 80;
location / {

# 用户请求/时,在html/下找依次index.htm、index.html
root html;
index index.htm index.html;

proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址
proxy_set_header HOST $http_host;
proxy_buffering on; #开启后端服务响应内容缓冲
proxy_buffers 256 4k; # 设置缓冲区大小和数量,proxy_buffering开启才会生效
proxy_busy_buffers_size 8k; #proxy_buffers中处于busy状态(buffer被写入往客户端传)的buffer大小设置

proxy_buffer_size 4k; #存储后端服务响应的header,跟proxy_buffering开启无关
proxy_max_temp_file_size 0k;#后端服务响应内容较大,会临时写到这这里

#超时设置
proxy_connect_timeout 30; #代理跟后端服务器连接超时时间
proxy_read_timeout 60; #代理读超时,等待后端服务的响应时间
proxy_send_timeout 60; #代理发送超时,代理两次发送之间的时间,不是一次发送的时间
#代理和后端服务发生超时或错误时,返回空或非法响应头,状态码为502
proxy_next_upstream error timeout invalid_header http_502;
}

# 发生错误时,请求50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

反向代理

客户端访问的目标服务不明确,客户端直接访问代理服务器,代理服务器内部将客户端请求转发到后方某个目标服务。结构图如下:

反向代理典型应用,比如负载均衡机制。为了支持海量用户访问,通过代理将用户请求分散到后端不同服务器上,而用户侧并不知感知。在nginx中配置示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
http {
#前置配置省略

#负载均衡配置
upstream app_severs {
server 127.0.0.1:9090;#server1
server 127.0.0.1:9091;#server2
server 127.0.0.1:9092;#server3
}

#反向代理
server {
listen 80; #监听的端口
server_name 127.0.0.1; #代理服务器地址

location {
proxy_pass http://app_servers; #设置定义的upstream
proxy_next_upstream error timeout invalid_header http_502;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

参考资料