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显然是必不可少的,主要运用其反向代理、负载均衡、动静分离等特性。