当前位置首页 > Nginx知识

nginx部署前端项目同时做负载均衡转发请求后端多台服务

阅读次数:285 次  来源:admin  发布时间:

看不懂你打我。

前言:其实配置非常简单,只是思路没搞通走了一点点弯路,这里记录下,希望大家不要踩坑,这篇文章给你们白嫖。

场景:有一台SLB做负载均衡转发前端服务,两台ECS做项目部署机子,分别部署前端和后端项目,就是A机子部署前端,也部署后端,B机子同理。SLB用来做前端转发。(注:slb可以添加不同的端口来做其他的转发配置,但我们这里没有这样用)

需求:需要请求A机子时需要负载分发到A后端或者B后端,请求B机子时候负载到A机子的服务或者B机子的后端服务。

nginx部署前端项目同时做负载均衡转发请求后端多台服务

我画了项目大致请求流程图,图上slb的可不用看,我们主要看nginx配置。

注意:我们需要在前端项目ip那边配置特定的标识,即例如在请求后端的接口加上 /api ,或者其他的 /testApi...随便都可以,只要分得清,最好命名规范)

那么我部署上去的 ip就为:http://172.1.1.1/api ,将前端打包部署上去到A机子。

把ip改为:http://172.1.1.2/api,再将前端打包,部署到B机子上去。

这样就能使得每次可以用A机子或者B机子做负载均衡转发后端请求了。

nginx部署前端项目同时做负载均衡转发请求后端多台服务

接下来配置nginx,两台的配置一样

server {
    listen       80;
    server_name  localhost;

#这是配置前端项目地址 location / { root /etc/nginx/html/dist; index index.html index.htm;     try_files $uri /index.html; #这个用来防止刷新页面404 } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }   #这里是配置负载均衡 location ^~/api {

#添加请求头什么的,通过F12可以响应头那边可以看到自己配置的这些头部内容,我这里暂时不用就注释了 # add_header Access-Control-Allow-Origin *; # add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; # add_header Access-Control-Allow-Headers 'Cache-Control,Content-Type,Authorization,id_token'; if ($request_method = 'OPTIONS') { return 204; } # 前端调用接口时有/api的url都会转发到后端(loadbalance为上面upstream关键字后面的名字) proxy_pass http://loadbalance; rewrite ^/api/(.*) /$1 break; #注意:这里需要重写/api为空因为这个/api是我们在前端项目写的标识,手动添加上去的

} } #这里添加两个转发的地址 upstream loadbalance { server 172.1.1.1:9000 weight=1; #weight用来配置权重,即nginx分发请求到这里的次数占比 server 172.1.1.2:9000 weight=1; }

总结:1、需要在前端访问后台接口的处,自己加特定标识做转发识别,2、需要重写这个标识,把他清空

结尾:一定需要特别注意的是,要在前端项目手动配置这个标识,然后请求到nginx监听的端口,通过nginx做这个负载转发接口!最开始我没注意,直接配到了后端的9000端口,给自己挖坑了。

上一篇:配置SSH隧道访问Ubuntu服务器上的MongoDB
下一篇:Ubuntu下访问Windows中Postgresql