Nginx反向代理和负载均衡
反向代理
配置请访问官方说明:http://nginx.org/en/docs/http/ngx_http_proxy_module.html
proxy_pass
描述:指定代理服务器的地址和端口,以及可能的 URI。
1
2
3
4# 语法
proxy_pass URL;
# 示例
proxy_pass http://backend_servers;
proxy_set_header
描述:设置发送到代理服务器的请求头。这常用于设置 Host、X-Real-IP、X-Forwarded-For 等头信息。
1
2
3
4
5
6# 语法
proxy_set_header field value;
# 示例
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header
描述:隐藏来自代理服务器的响应头。
1
2
3
4# 语法
proxy_hide_header field;
# 示例
proxy_hide_header X-Powered-By;
proxy_pass_header
描述:允许传递来自代理服务器的特定响应头。
1
2
3
4# 语法
proxy_pass_header field;
# 示例
proxy_pass_header Server;
proxy_connect_timeout
描述:设置与代理服务器建立连接的超时时间。
1
2
3
4# 语法
proxy_connect_timeout time;
# 示例
proxy_connect_timeout 60s;
proxy_send_timeout
描述:设置向代理服务器发送请求的超时时间。
1
2
3
4# 语法
proxy_send_timeout time;
# 示例
proxy_send_timeout 60s;
proxy_read_timeout
描述:设置从代理服务器读取响应的超时时间。
1
2
3
4# 用法
proxy_read_timeout time;
# 示例
proxy_read_timeout 60s;
proxy_buffer_size
描述:设置从代理服务器读取响应的第一部分缓冲区的大小。
1
2
3
4# 用法
proxy_buffer_size size;
# 示例
proxy_buffer_size 4k;
proxy_buffers
描述:设置用于从代理服务器读取响应的缓冲区数量和大小。
1
2
3
4# 用法
proxy_buffers number size;
# 示例
proxy_buffers 8 4k;
proxy_busy_buffers_size
描述:当响应被快速发送时,Nginx 会尝试使用更大的缓冲区来存储响应。这个指令设置这些“忙碌”缓冲区的大小。
1
2
3
4
5
# 用法
proxy_busy_buffers_size size;
# 示例
proxy_busy_buffers_size 8k;
proxy_temp_path
描述:设置用于存储来自代理服务器的临时文件的路径。
1
2
3
4
5
# 用法
proxy_temp_path path [level1 [level2 [level3]]];
# 示例
proxy_temp_path /var/nginx/proxy_temp
proxy_max_temp_file_size
描述:设置允许存储到临时文件的响应的最大大小。超过这个大小的响应将不会被保存到磁盘上。
1
2
3
4# 用法
proxy_max_temp_file_size size;
# 示例
proxy_max_temp_file_size 1024m;
示例
修改Nginx配置,添加静态目录及反向代理配置,此时访问则会代理到tomcat8080服务上
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[root@RockyLinux9 ~]# cat /usr/local/nginx/conf/nginx.conf
http {
...
server {
listen 80;
#server_name localhost;
server_name fulsun.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location /fulsun {
root /var/www;
index index.html index.htm;
expires max;
add_header Cache-Control public;
}
location / {
proxy_pass http://localhost:8080; # 假设Tomcat在本地8080端口上运行
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 其他的Nginx代理设置...
}
# location / {
# root html;
# index index.html index.htm;
# }
...
}
}
负载均衡
Nginx的负载均衡配置主要通过nginx.conf配置文件中的upstream模块
和server模块
的配合使用来实现。
upstream
模块用于定义后端服务器组,这些服务器组可以被proxy_pass
、fastcgi_pass
、uwsgi_pass
、scgi_pass
和memcached_pass
等指令引用,以实现负载均衡。
参数说明
官方说明:http://nginx.org/en/docs/http/ngx_http_upstream_module.html
server
描述:指定后端服务器的地址和端口,格式为 address[:port] 。若省略端口,则默认为80端口。
1
2# 语法
server address [parameters];1
2
3
4upstream backend_servers {
server backend1.example.com;
server backend2.example.com:8080;
}
weight
指定服务器的权重,默认为1。权重越大,被分配到的请求就越多。
1
weight=number
1
2
3
4upstream backend_servers {
server backend1.example.com weight=5;
server backend2.example.com weight=1;
}
max_fails
描述:在fail_timeout指定的时间段内,达到此失败次数后,服务器将被标记为不可用。默认值为1。
1
max_fails=number
1
2
3upstream backend_servers {
server backend1.example.com max_fails=3;
}
fail_timeout
描述:指定在将服务器标记为不可用之前,服务器应连续失败的次数的时间段。默认值为10秒。
1
fail_timeout=time
1
2
3upstream backend_servers {
server backend1.example.com fail_timeout=30s;
}
状态参数:down
描述:标记服务器为永久不可用。该参数不能与
backup
参数一起使用。1
2
3
4upstream backend_servers {
server backend1.example.com down;
server backend2.example.com;
}
状态参数:backup
描述:标记服务器为备份服务器。当所有非备份服务器都不可用时,才会使用备份服务器。
1
2
3
4upstream backend_servers {
server backend1.example.com;
server backup1.example.com backup;
}
hash、ip_hash、least_conn、random 和 least_time
描述:指定负载均衡的分配方法。
hash $request_uri
:基于请求的URI进行哈希,然后分配到特定的服务器。ip_hash
:基于客户端的IP地址进行哈希,确保来自同一IP地址的请求始终被发送到同一台服务器(用于保持会话一致性)。least_conn
:将请求分配给当前连接数最少的服务器。random
:随机分配请求到各个服务器。least_time header|last_byte|last_byte
(Nginx Plus版本):基于服务器处理请求的平均时间分配请求。1
2
3
4
5upstream backend_servers {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
keepalive
描述:在upstream块中启用或禁用长连接(persistent connections)。默认情况下,长连接是启用的。
1
keepalive connections;
1
2
3
4
5
6upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
keepalive 32;
}
示例
创建测试目录及文件
1
2
3
4
5
6
7
8
9
10
11
12
[root@RockyLinux9 ~]# mkdir -p /var/www/{fulsun8081,fulsun8082}
[root@RockyLinux9 ~]# cat /var/www/fulsun8081/index.html
<html>
This directory is /var/www/fulsun8081.
</html>
[root@RockyLinux9 ~]# cat /var/www/fulsun8082/index.html
<html>
This directory is /var/www/fulsun8082.
</html>修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 添加两个server段,监听8081和8082端口,并分别执行对应的测试文件
[root@RockyLinux9 ~]# vim /usr/local/nginx/conf/nginx.conf
http {
...
server {
listen 8081;
root /var/www/fulsun8081;
}
server {
listen 8082;
root /var/www/fulsun8082;
}
...
}继续修改配置文件, 添加
upstream
段,定义两个server指向8081和8082端口,修改默认server段中的location,指向定义的upstream。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[root@RockyLinux9 ~]# vim /usr/local/nginx/conf/nginx.conf
http {
...
upstream backup {
server 192.168.199.152:8081 weight=1 fail_timeout=10s;
server 192.168.199.152:8082 weight=3;
}
server {
listen 8081;
root /var/www/fulsun8081;
}
server {
listen 8082;
root /var/www/fulsun8082;
}
server {
listen 80;
#server_name localhost;
server_name fulsun.com;
location / {
proxy_pass http://backup;
}
}
}nginx -s reload
后,可以看到访问80端口,显示了8081和8082端口对应页面。定义参数weight分别为1和3,则表示每访问4次,其中1次会访问到8081端口页面,剩余3次会访问到8082端口页面。