Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,在微服务架构中,Nginx作为客户端请求的第一层中间件,通常将请求转发代理给网关。一般Nginx运用的主要场景有反向代理、负载均衡、动静分离等,在微服务架构如下:
在这里插入图片描述

反向代理

在这里插入图片描述
为了安全起见,一般我们不会将应用服务器内网地址暴露给外界,此时就让Nginx作为代理来访问内网地址。而Nginx的IP地址可以作为公网IP暴露给外界使用,这样就屏蔽了内网服务器信息。例如:
在这里插入图片描述

  • 首先在本机修改hosts文件
    路径为:C:\Windows\System32\drivers\etc\hosts
    添加以下内容:
# 192.168.31.130是远程Nginx服务器地址
192.168.31.130    xfmall.com

当客户端输入 xfmall.com时,通过本地域名映射规则,解析出Nginx服务器地址

  • 设置Nginx反向代理
    修改nginx.conf的server段
 listen 80;
 server_name  xfmall.com;
 location / { 
  #代理给内网服务地址   
  proxy_pass http://192.168.31.130:9000;
 }

这样,我们就实现了Nginx的反向代理,是不是很简单呢?

负载均衡到网关

在实际的微服务架构中,Nginx代理请求后,为了方便各个微服务的统一管理和访问,还需要将代理转给网关(gateway)由网关来统一将请求路由给各个微服务,这一就不用给每个微服务都配置反向代理。

  • 配置负载均衡
    在nginx.conf中的http段添加:
#负载均衡
upstream xfmall{
        server 192.168.1.86:88;  #网关地址
    }
  • 修改server段
location / {
        #设置host header,nginx在代理给网关时会丢掉host_header
        proxy_set_header Host $host;
        proxy_pass http://xfmall;
    }

至此,我就完成Nginx的反向代理与负载均衡

动静分离

一般为了提升程序的性能,通常借助Nginx实现动静分离。动:动态请求,需经Java程序处理后响应的请求,比如SpringMVC处理,静:静态资源,比如css,js,jpg,文本等文件,我们可以将静态资源放到Nginx,而动态请求交给后端程序处理,这一分离开来,就会降低Tomcat服务器的负载,整体上提升程序的响应。整个流程如图:
在这里插入图片描述

  • 将静态资源放到Nginx
    在这里插入图片描述
    cd /mydata/nginx/html/,Nginx的静态资源都在html目录下,接着通过远程传输工具将本地的index文件夹上传到远程Linux
    在这里插入图片描述
    vi nginx.conf
    在原来的反向代理基础上,加入静态资源配置:
  #静态资源配置
    location /static/ {
     root /usr/share/nginx/html;
    }

当请求以/static开始时,就会去找nginx下指定的静态资源。综上,我们就完成了Nginx的动静分离,借助Jmeter压测工具,我们会看到整个系统的响应时间以及吞吐量有了明显的提升。

总结

在高并发分布式系统中,为提升程序的性能,Nginx显然是必不可少的,主要运用其反向代理、负载均衡、动静分离等特性。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐