在现代互联网架构中,负载均衡和反向代理是非常重要的组件。它们能够帮助我们实现高可用性、高性能、高可扩展性和安全性。本文将介绍如何在 Linux 上使用 NGINX 做负载均衡和反向代理。
一、什么是负载均衡和反向代理
负载均衡是将流量分发到多个后端服务器,以达到提高系统性能、可用性和可扩展性的目的。负载均衡通常有以下几种方式:
- 轮询(Round-robin):按顺序把请求分发给各个服务器;
- IP 哈希(IP Hash):根据客户端 IP 地址的哈希值分发请求,这样同一个 IP 的请求总是分发到同一台服务器;
- 最小连接数(Least Connections):把请求送到当前连接数最少的服务器上;
- 权重(Weighted):服务器的处理性能不一,因此可以根据其处理能力的不同设定不同的权重。
反向代理是指客户端通过访问反向代理服务器来访问应用服务器,反向代理服务器会代表客户端向应用服务器请求资源。反向代理服务器通常有以下优点:
- 可以隐藏后端服务器的真实 IP 地址,增加网络安全性;
- 可以缓存静态资源,减轻后端服务器的负担;
- 可以实现动态负载均衡,提高系统可用性、性能和扩展性。
二、安装 NGINX
在 Ubuntu 系统上,可以使用以下命令安装 NGINX:
```
sudo apt-get update
sudo apt-get install nginx
```
在 CentOS/RHEL 系统上,可以使用以下命令安装 NGINX:
```
sudo yum update
sudo yum install nginx
```
安装完成后,可以使用以下命令启动 NGINX:
```
sudo systemctl start nginx
```
可以使用以下命令检查 NGINX 是否启动成功:
```
sudo systemctl status nginx
```
如果看到类似于以下输出,说明 NGINX 启动成功:
```
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2021-08-02 16:47:23 CST; 12s ago
Process: 13535 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 13536 (nginx)
CGroup: /system.slice/nginx.service
├─13536 nginx: master process /usr/sbin/nginx
└─13537 nginx: worker process
```
三、配置负载均衡和反向代理
1. 负载均衡
在 NGINX 中,可以使用 upstream 模块配置负载均衡。打开默认的 NGINX 配置文件:
```
sudo vi /etc/nginx/nginx.conf
```
在 http 块中添加以下内容:
```
http {
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
```
上面的配置中,我们定义了一个名为 backend 的 upstream,其中包含了三个服务器,分别是 10.0.0.1、10.0.0.2 和 10.0.0.3,它们都监听在 8080 端口上。
在 http 块内,我们定义了一个 server 块,它监听在 80 端口上。在这个 server 块中,我们使用了 proxy_pass 指令将请求转发给 backend upstream,实现了负载均衡的效果。
保存并退出文件,执行以下命令重启 NGINX:
```
sudo systemctl restart nginx
```
现在可以通过浏览器访问 NGINX 服务器的 IP 地址,查看负载均衡是否正常工作。
2. 反向代理
在 NGINX 中,可以使用 location 模块配置反向代理。打开默认的 NGINX 配置文件:
```
sudo vi /etc/nginx/nginx.conf
```
在 http 块中添加以下内容:
```
http {
server {
listen 80;
location / {
proxy_pass http://10.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
```
在上面的配置中,我们定义了一个 server 块,它监听在 80 端口上。在这个 server 块中,我们使用了 location 指令将请求转发给 10.0.0.1:8080,实现了反向代理的效果。
同时,我们添加了两个 proxy_set_header 指令,将客户端的 Host 和真实 IP 地址传递给后端服务器。
保存并退出文件,执行以下命令重启 NGINX:
```
sudo systemctl restart nginx
```
现在可以通过浏览器访问 NGINX 服务器的 IP 地址,查看反向代理是否正常工作。
四、总结
本文介绍了如何在 Linux 上使用 NGINX 实现负载均衡和反向代理。在实际应用中,需要根据实际情况进行选型和配置,以满足业务需求。