前言
Nginx服务器经常被用于设置反向代理和负载均衡,这篇文章简要说明一下是如何设置的。
一、反向代理
反向代理可以把请求分配到不同的服务器上。
现在有三个服务器它们的访问地址如下:
服务器1:localhost:8080
服务器2:localhost:8081
服务器3:localhost:8082
我这里使用js代码在node环境下运行来作为三个不同的服务器,以下是第一个服务器的js代码:
// 引入http模块
const http = require('http');
// 创建HTTP服务器
const server = http.createServer((req, res) => {
// 设置响应头
res.writeHead(200, { 'Content-Type': 'text/plain' });
// 发送响应体
res.end('你访问到服务1了!端口号是8080\n');
});
// 监听8080端口
server.listen(8080, () => {
console.log('Server is running at http://localhost:8080/');
});
// 错误处理
server.on('error', (e) => {
if (e.code == 'EADDRINUSE') {
console.error('端口8080已被占用,请更换端口或检查是否有其他应用正在使用该端口。');
}
// 处理其他类型的错误
});
另外两个服务器只要更改端口号即可。
现在给nginx进行如下配置来完成反向代理:
一般一个请求路径的成分是协议://服务器地址/服务器资源地址。其中服务器地址即服务器的ip或域名,经过上面的配置后,服务器资源地址中含app的请求,都会使用nginx的反向代理功能随机转发到代理的服务器上:
这里可以看到请求被转发到了8081端口的服务器上(前面的乱码是编码方式不统一造成的,但不影响结果),接下来用同样的请求地址继续访问:
发现请求被转发给了8080端口的服务器,于是反向代理设置成功。
二、负载均衡
反向代理把请求进行了分流,但这还不够,不同的服务器性能是不一样的,我们分流时可以让性能较好的服务器处理更多的请求,以此保证更高的可用性。这就是负载均衡。
有两种方案:权重、ip_hash
1.权重
可以为代理的服务器各自分配一个全权重值,权重越高的服务器分配到请求的可能性越大,即请求多时其分配到的请求越多。
要为代理的服务器分配权重,直接在后面用weight指定即可,默认情况是1.如下:
2.ip_hash
该方案会将请求的ip地址进行hash计算,同样的请求ip多次访问固定转发到同一服务器。
如下:
这样一来,同一客户端发送的请求每次都是访问同一服务器:
总结
这里简单说明了一下如何用nginx配置反向代理和负载均衡