开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 16 天,点击查看活动详情
作为一个优秀的代理服务器,有必要了解下Nginx的后端代理的使用
Http代理
之前了解了 Nginx 的基本使用方法,其实就是在配置文件里配置监听的服务器端口,用来接受请求。并且可以将本地文件映射为url,通过uri上路径的截取,返回对应的文件内容。
文件映射仅仅是 Nginx 提供的一个能力,使用 Nginx 还有一个重要的原因是,它还可以作为后端服务的反向代理来使用。客户端无需知道具体是哪一个服务器在提供服务。请求的流程可以看下。
客户端发送的请求到达 Proxy Server(这里代表 Nginx),Proxy Server会根据配置信息,选择一个 Backend Server,将请求转发过去。这里客户端只需要知道代理服务器,即 Nginx 的地址即可。所以 Nginx 可以对后端服务进行负载均衡。
怎么使用
回顾下 Nginx 的简单配置是怎么配置的,我们首先要在默认的三个路径/usr/local/nginx/conf,/etc/nginx,以及 /usr/local/etc/nginx中的其中一个路径,创建 nginx.conf 文件。最简单的配置信息如下。
events {}
http {
server {
location / {
# 没有指定端口默认是 80 端口
# 将本地路径作为映射,打进来的请求会在这个文件夹下查找
root /data/www;
}
}
}
代理服务器也很简单,我们只需要指定 proxy_pass 就可以了。我们来看看示例。
events {}
http {
server {
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
在这个配置下,Nginx 会监听 80 端口,并且将所有请求都转发到后端服务 localhost:8000 上,并且我们设置了两个请求头,Host 以及 X-Real-IP。
那么如果我们有多个相同的服务,想要对这些相同服务进行负载均衡的话,就需要配置下负载均衡模块的东西了。负载均衡我们需要用到 upstream 来将相同的服务进行分组。
events {}
http {
upstream backend {
server srv1.backend.com;
server srv2.backend.com;
server srv3.backend.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
这个配置配置了一组服务 backend,这一组服务中有三个需要负载均衡的后端服务:srv1.backend.com,srv2.backend.com 以及 srv3.backend.com。在 proxy_pass 字段配置的是分组名称,这样就完成了负载均衡。每个服务的情况有可能不一样,因此有时候需要配置负载均衡的策略。简单的根据权重分配请求的配置如下。
events {}
http {
upstream backend {
server srv1.backend.com weight=3;
server srv2.backend.com;
server srv3.backend.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
其实就是在 服务器 配置后面加上 weight 字段,表示每个服务的权重。
完结
代理的配置以上就差不多了,可以应对一些集群的请求,有需要可以查看详细的文档。