个人工作笔记,备忘。
1. 需求描述
有两套前端代码,project01 和 project02,分别放在 nginx 的 html 目录下 有一套后端服务,两个前端项目都请求该服务,并且该后端服务进行多节点部署,通过 nginx 负载均衡确保高可用。 这里我将后端服务使用 docker 方式启动两个容器,端口分别是 8888 和 9999
2. 配置详情
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 配置负载均衡服务
upstream demo {
# 配置负载均衡,weight 为权重,去掉则使用轮询策略
server localhost:8888 weight=1;
server localhost:9999 weight=2;
}
server {
listen 8080;
server_name localhost;
# nginx 默认根目录
location / {
root html;
index index.html index.htm;
}
# 前端 01 路径指定
location /project01 {
alias html/project01;
index index.html;
}
# 前端 02 路径指定
location /project02 {
alias html/project02;
index index.html;
}
# 前端请求后端
location /demo {
# 无负载均衡的写法
# proxy_pass http://localhost:8888/demo;
# 通过负载均衡实现
proxy_pass http://demo;
}
}
}
核心配置注释:
负载均衡配置
# 配置负载均衡服务
upstream demo {
# 配置负载均衡,weight 为权重,去掉则使用轮询策略
server localhost:8888 weight=1;
server localhost:9999 weight=2;
}
这里 demo 根据自己的请求信息进行定义,我这示例程序中,前端请求后端 url 是 http://localhost:8888/demo/xxx 所以此处使用 demoweight=1 weight=2 为权重配置,可以去掉,去掉后为轮询策略,轮流对服务节点进行请求。
前端项目目录配置
# 前端 01 路径指定
location /project01 {
alias html/project01;
index index.html;
}
由于有多个前端项目,不能直接放在 nginx 的 html 目录下,需要建立项目单独的目录,然后通过 alias 指定该目录,后面路径可以用相对路径,也可以用绝对路径。
调用负载均衡配置
# 前端请求后端
location /demo {
# 无负载均衡的写法
# proxy_pass http://localhost:8888/demo;
# 通过负载均衡实现
proxy_pass http://demo;
}
按照无负载均衡的写法,即 proxy_pass http://localhost:8888/demo 现在因为有多个节点,可以是多个 ip 或多个端口,因此需要通过示例中的写法,http:// + 之前配置的负载均衡中的 demo
3. 效果示例
通过指定不同 context 访问到不同的前端项目中(/project01 和 /project02) 负载均衡实现后端请求 这是权重为 1:2 时的请求结果 这是没有配置权重,使用默认轮询策略的请求结果
相关文章
发表评论