手把手搭建Nginx负载均衡+反向代理

2023-11-21 16:04:38 浏览数 (1)

一:需求背景

Nginx相信大家应该不陌生吧!是一个高性能web服务器,可以做负载均衡或者是反向代理,比如,把静态页面直接部署到到html,实现动静分离,一个服务器部署多个服务,缓解服务压力,等等,都可以利用Nginx实现。

1.负载均衡

这个理解比较简单,其实就是压力分摊,一个工程部署多个节点,也就是传说中的分布式,这样对于所有请求不会全部落到一个节点上,而造成某个节点压力过大。nginx在配置上游服务就可以设置对应负载权重。

2.反向代理

这个可能不太好理解,可以先看一下图:

也就是,用户就访问了一个服务器域名,Nginx会帮我们转发到实际访问的ip或者端口,比如对于微服务工程,用户访问:www.mall.com/product,但是可能会转发到product-service这个工程的主机ip,这就是Nginx给我们处理的,反向代理。

而正向代理,就不会去转发,处理请求也是域名对应的ip主机。

二:Nginx负载均衡 反向代理实战

1.Nginx配置结构

首先,在开发配置修改前,我们简单了解一下Nginx的结构,对于Windows版本,官网下载,文件目录结构如下:

我们主要关注的是conf文件下的配置文件nginx.conf,这个文件也是我们后面要修改配置负载均衡和反向代理,后面对于其他Nginx配置也是修改这个文件

nginx.conf文件的结构:主要关注server块,一个服务对应一个sever块

2.代码实战

使用idea开发工具随便讲一个springboot工程,本文主要是介绍Nginx的配置,工程服务内容可以不用在意,不过可以写一个controller请求,响应提示我们请求了那个服务器端口,来验证负载均衡。保证工程正常启动,配置启动项,在VM配置JVM启动端口,指定服务端口,我们可以配置两个服务端口,9901和9902,来模拟同个服务部署到两个机器

Nginx修改conf配置文件:

代码语言:javascript复制
#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;


    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 配置上游服务器,负载均衡
    upstream mynginx{
        server localhost:9901;
		server localhost:9902;
    }

    server {
        listen       8801;
        server_name  localhost;


        location / {
            proxy_pass http://mynginx;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

配置说明:

网络请求到localhost:8801,会反向代理到上游服务器,也就是upstream mynginx,上游服务配置了多个,会默认根据轮询的方式进行请求。

程序效果:我们只访问http://localhost:8801/inventory/sale,但是实际上9901和9902两个端口会分担请求,至此我们就完成了负载均衡。

三:总结

本文主要是介绍了Nginx负载均衡和反向代理的hallo world,算是比较基础入门,比较适合新手开始,能够加深对Nginx的理解和使用。其实Nginx还能做很多事情,后续会继续发文,欢迎大家评论区留言和订阅。

​我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞