nginx连接前后端分离项目 或 负载均衡映射多个服务器

news2024/11/27 17:35:50

nginx的两种用法:

  1. 打通前后端项目,前后端分离的项目,通过nginx建立连接

  2. 负载均衡,一台机器请求转发至多个服务器

1. 前后端分离项目,打通前后端项目

在这里插入图片描述

前端项目中的配置:

在这里插入图片描述
在这里插入图片描述

后端项目的ip和端口号就是正常的

下面看看nginx的配置文件:

在这里插入图片描述

将打包后的前端项目放这里:

vue项目打包后会生成一个dist文件夹

在这里插入图片描述
放在服务器上:
在这里插入图片描述
如果说前端的项目有改动,或者nginx.conf有改动,则重启nginx

cd /usr/local/nginx/sbin
./nginx -s reload

在这里插入图片描述

nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		
		location / {
			root   html;
			try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
		
		location /prod-api/{
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://localhost:8080/;
			proxy_connect_timeout 300s;
		    proxy_send_timeout 300s;
		    proxy_read_timeout 300s;
		}
		
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2. 负载均衡,一台机器请求转发至多个服务器

![](https://img-blog.csdnimg.cn/7ff57994f60e461bab308e19698e200f.png)

有些项目,需要负载均衡,就是真实网址不想暴露出来,当用户请求nginx服务器所在的网址时,会跳转到其他网站

有以下几种方式,并将配置文件献上:

  1. ip_hash
  2. 轮询
  3. 权重轮询
  4. 最少连接

这几种方式nginx.conf配置文件基本相同,就是upstream里面的东西不一样

2.1 ip_hash

用途:
这个方法确保了相同的客户端的请求一直发送到相同的服务器,这样每个访客都固定访问一个后端服务器
在这里插入图片描述
例如
nginx服务器ip为10.1.11.10,则图示中,
张三的电脑不论何时访问10.1.11.10:9001时,跳转的地址一直是10.1.11.12:8001,
李四的电脑不论何时访问10.1.11.10:9001时,跳转的地址一直是10.1.11.13:8002
因为张三李四的电脑不是同一台,IP不一样导致的

nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream myhost{
		ip_hash;
		server 10.1.11.12:8001;
		server 10.1.11.13:8002;
    }

    server {
        listen       9001;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
        location / {
			proxy_pass http://myhost;
        }
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2.2 轮询

就是将上一个配置文件中的ip_hash去掉即可

用途:
该方式是默认方式,轮询适合服务器配置相当,无状态且短平快的服务使用。另外在轮询中,如果服务器挂掉,会自动剔除该服务器

例如:
nginx服务器ip为10.1.11.10,则这种方式中,
张三的电脑不论何时访问10.1.11.10:9001时,跳转的地址有时是10.1.11.12:8001,有时是10.1.11.13:8002
李四的电脑不论何时访问10.1.11.10:9001时,跳转的地址有时是10.1.11.12:8001,有时是10.1.11.13:8002
因为访问跳转是随机的

nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream myhost{
		server 10.1.11.12:8001;
		server 10.1.11.13:8002;
    }

    server {
        listen       9001;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		
        location / {
			proxy_pass http://myhost;
        }
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2.3 权重轮询

用途:
nginx服务器根据配置的权重进行请求分发,适合服务器的硬件配置差别比较大的情况

例如:
nginx服务器ip为10.1.11.10,则这种方式中,
张三的电脑访问10.1.11.10:9001时,访问了4次,有一次跳转的地址是10.1.11.12:8001,有三次跳转的地址是10.1.11.13:8002
因为访问跳转是有权重的,10.1.11.12:8001的权重是1,10.1.11.13:8002的权重是3

nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream myhost{
		server 10.1.11.12:8001 weight=1;  #该台服务器接受1/4的请求量
		server 10.1.11.13:8002 weight=3;  #该台服务器接受3/4的请求量
    }

    server {
        listen       9001;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		
        location / {
			proxy_pass http://myhost;
        }
    }
    
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2.4 最少连接

用途:
轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果,适合请求处理时间长短不一造成服务器过载的情况

例如:
nginx服务器ip为10.1.11.10,则这种方式中,
之前有10个人访问10.1.11.10:9001,有3次访问跳转到了10.1.11.12:8001,
有7次访问跳转到了10.1.11.13:8002
那么张三再次访问时,会跳转到10.1.11.12:8001
因为10.1.11.12:8001连接的次数最少

nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream myhost{
		least_conn; # 把请求分派给连接数最少的服务器
		server 10.1.11.12:8001 ;  
		server 10.1.11.13:8002 ;  
    }

    server {
        listen       9001;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		
        location / {
			proxy_pass http://myhost;
        }
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

verilog实现分频(奇数分频和偶数分频,通用版)

大家好,最近写了一些分频器的设计,发现奇数分频和偶数分频是比较常用分频效果,所以写了一个比较简单的分频代码,适用于奇数分频和偶数分频(不考虑占空比),代码已经经过测试,需要可自…

微服务框架 SpringCloud微服务架构 5 Nacos 5.7 Nacos 与 Eureka 的对比

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构5 Nacos5.7 Nacos 与 Eureka 的对比5.7.1 Nacos 注册中心细节分析5.7.2 临…

基于马科维茨与蒙特卡洛模型的资产最优配置模型(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 资本是保险公司经营的核心要素,是资产配置的重要约束条件。本文在马克维茨方法的基础上,将偿付能力引入了资产配置的优化模型。…

VH6501模板工程介绍(一)

VH6501硬件结构 1.式样 1.正向有5个灯,用来指示干扰的触发状态,干扰类型(数字或模拟),通道通信以及设备状态。 2.两个DB9接口(公头male和母头female),这是CAN或CANFD通道&#xff0…

(二)Java 线程

一、创建和运行线程 1. 方法一,直接使用 Thread Slf4j(topic "c.Test1") public class Demo {public static void main(String[] args) {Thread t new Thread(){Overridepublic void run() {log.debug("running");}};t.setName("t1&qu…

Casein-PEG-Indocyanine green 络蛋白-聚乙二醇-吲哚菁绿 Casein-ICG

产品名称:络蛋白-聚乙二醇-吲哚菁绿 英文名称:Casein-PEG-Indocyanine green 质量控制:95% 原料分散系数PDI:≤1.05 存储条件:-20C,避光,避湿 用 途:仅供科研实验使用,…

【免杀前置课——Windows编程】十三、事件与信号量——事件与互斥体区别、操纵信号量实现游戏多开访问控制(附代码)

事件 事件可以完全控制,其他无法控制线程的执行顺序,但是事件对象可以做到。 ***事件(Event)***是在线程同步中最常使用的一种同步对象,事件包含一个使用计数,一个是用来表示自动重置/手动重置的布尔值,另…

[附源码]计算机毕业设计springboot高校后勤保障系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]计算机毕业设计springboot个性化名片网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

MySQL的索引与事务

目录 1.索引的本质 2.索引的使用 2.1查看索引 2.2创建索引 2.3删除索引 3.索引的数据结构 3.1B树 3.2B树 4.事务 4.1 事物的回滚(rollback) 4.2 事务的四大特性(ACID) 4.2.1 原子性 4.2.2 一致性 4.2.3 持久性 4.2.4 隔离性 5.并发引起的问题 5.1 "读脏数…

IDEA中debug启动报错Method breakpoints may dramatically slow down debugging

1.原因:是因为我们打断点太多了,可能在mapper或者service层打了断点导致启动失败 解决方案:1.去掉所有我们打的断点, 2.去掉mapper或者service中我们打的错误断点

学习swagger,使用正则改造项目, 生成接口文档

学习swagger,使用正则改造项目 关于SwaggerKnife4j生成统一接口文档教程请点击以下关于SwaggerKnife4j生成统一接口文档 1 关于构建swagger文档所需要的依赖和配置类 SwaggerKnife4j - 统一接口文档 我们以某一个项目的swagger升级改造为例。 2 如何使用正则表达…

Discourse 的左侧边栏可以修改吗

在默认的 Discourse 配置中,我们左侧的边栏可以根据自己的要求进行修改吗? 解决办法 针对自己登录的用户,你是可以自己调整左侧边栏的配置。 单击右上角你的个人头像,然后选择属性。 在切换的界面中,选择属性。 在出…

Postman内置动态参数和自定义的动态参数以及断言方式

一、问题:每次请求均需手动修改参数 解决方案:使用动态参数:内置动态参数/自定义动态参数,解决上述问题 二、Postman动态参数 1、内置动态参数,表现形式:{{$}} 2、常用的内置动态参数 {{$timestamp}} …

基于模糊小波神经网络的空中目标威胁评估(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 在现代战争中, 随着信息化和智能化的飞速发展, 以及作战环境的日益复杂, 实时而准确地评估目标威胁, 不仅为空战决策提供科学的…

最全面的Spring教程(四)——Controller 与 RestFul

前言 本文为 【SpringMVC教程】Controller 与 RestFul 相关内容介绍,具体将对控制器Controller,实现Controller接口,使用注解Controller,RequestMapping及RestFul 风格(包括:Rest架构的主要原则、什么是Res…

微服务框架 SpringCloud微服务架构 6 Nacos 配置管理 6.2 微服务配置拉取

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构6 Nacos 配置管理6.2 微服务配置拉取6.2.1 统一配置管理6.2.2 直接开干6.2…

从电商到超市,美团的零售之变

从上海回到湖南长沙县的时候,何靓做好了过“苦日子”的准备。作为一个湖南人,她知道县城往往意味着没有星巴克和喜茶,意味着仅有的一两座电影院环境不太好,意味着每天晚上九点后连便利店都大门紧闭。 但在真正回到这“半个故土”…

Cloudcomplare标注3D分割数据

免安装软件下载 https://www.sibspress.org/soft/23705.html 可以打开txt, pcd, ply等3D点云数据 将文件直接拖进软件内打开 选择剪切工具:剪刀,并设置线标注工具 鼠标左键选择区域, 鼠标右键结束选择 选择圈内或…

没睡醒就来上班的程序员解决BUG

仅以此篇纪念我在低级错误面前烦躁又蒙B的3分钟。 今早,我在公司系统上点了一下我负责模块里的一个查询。我靠,这个查询条件竟然没生效。 看代码,原来xml文件里的SQL没写这个查询条件,这太简单了,加上。)…