一、正向代理与反向代理
正向代理:代理服务器搭建在客户端侧,帮助客户端完成一些事情,并隐藏客户端信息,如“科学上网”
反向代理:代理服务器搭建在Web服务器侧,帮助Web服务器完成一些事情,并屏蔽内网服务器信息,并负载均衡访问
显然,我们要搭建服务器访问环境,需要使用到的是“反向代理”;
二、修改hosts,完成DNS解析
因为浏览器在访问域名前,先回查看本系统内部的域名映射规则(hosts文件中),如果已经有映射了,那么就会直接去对应的ip地址;
windows下hosts文件目录:C:\Windows\System32\drivers\etc\hosts
修改添加上 zidanmall.com 的映射,ip为我们虚拟机的ip;
修改hosts后要重启电脑,如果不想重启,执行以下两步:
cmd ipconfig /displaydns //显示DNS缓存 ipconfig /flushdns //删除DNS缓存
然后我们访问虚拟机上的nginx试试:
DNS配置成功;
三、使用Nginx反向代理将所有zidanmall.com的请求都转到product商品服务
1、首先,要了解Nginx的配置结构:
2、使用nginx负载均衡 zidanmall.com 到 网关gateway
2.1、在上游服务器配置 负载均衡服务器(因为暂时我只部署了一台网关gateway):
2.2、在下游配置反向代理(zidanmall.conf是我复制得/conf.d/default.conf配置文件修改的)
注意:
这里的proxy_set_header配置,我们后面网关需要以Host断言,但是正常情况下,Nginx做反向代理转发的时候,会丢掉很多信息,Host就是其中一个,这样的话,后面断言肯定就没有办法生效,所以我们需要将header中的host补上;
2.3、重启nginx,访问 zidanmall.com
这是因为即使我们转到网关Gateway了,但是Gateway并不知道下一步应该转给谁?
2.4、我们需要到网关下配置,对 zidanmall.com 这个host的路由规则(注意这里不再是Path断言,而是Host断言)
- id: zidanmall_host_route uri: lb://zidanmall-product predicates: - Host=**.zidanmall.com
2.5、此时在访问 zidanmall.com 试试:
整个访问过程中都经历了哪些过程?
zidanmall.com ————> DNS解析到192.168.174.141(虚拟机上的Nginx) ————> 负载均衡转发到本机 192.168.174.2:88 Gateway服务 ————> 根据Host断言 转发到zidanmall-product服务
到这里使用Nginx反向代理实现的域名访问负载均衡工作就全部完成了,虽然是在本地完成的,但是线上环境也一样!
四、使用Nginx实现zidanmall-product动静分离
1、将所有的静态文件放到nginx的 /html/static目录下
2、修改nginx 的配置文件 zidanmall.conf :
然后重启nginx容器;
3、修改项目template/index.html 文件:
将所有的静态资源前面都加上/static
href="index | href="/static/index |
src="index | src="/static/index |
检查其它漏网之鱼,比如背景图片之类的 |
4、重启项目检查:
所有的静态文件都可以获取到,即动静分离成功!
五、完成zidanmall-search服务检索页面的动静分离
1、为search服务映入thymeleaf模板引擎的依赖pom.xml:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>2.1.5.RELEASE</version> </dependency>
2、将页面 list.html 放到zidanmall-search项目的 /resources/templates 下:
并添加thymeleaf的名称空间:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
然后像上面zidanmall-product模块一样,更新静态文件路径,增加 /static/search/
3、将search服务相关的静态文件全部拷贝到nginx文件系统/html/static/search/ 下:
4、配置DNS域名转发
192.168.174.141 search.zidanmall.com
5、配置nginx,将 search.zidanmall.com 全部转发给网关:
6、修改zidanmall-gateway的路由规则:
7、在zidanmall-search服务中增加web.SearchController.java:
@Controller public class SearchController { @GetMapping({"/", "/list.html"}) public String listPage(){ return "list"; } }
8、打开页面,或从首页跳转:
到这里,检索页的动静分离,页面展示也全都完成了!