一:需求背景
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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!