子丹商城——使用Nginx搭建域名访问环境(动静分离)

一、正向代理与反向代理

正向代理:代理服务器搭建在客户端侧,帮助客户端完成一些事情,并隐藏客户端信息,如“科学上网”

6.jpg

反向代理:代理服务器搭建在Web服务器侧,帮助Web服务器完成一些事情,并屏蔽内网服务器信息,并负载均衡访问

7.jpg

显然,我们要搭建服务器访问环境,需要使用到的是“反向代理”;


二、修改hosts,完成DNS解析

因为浏览器在访问域名前,先回查看本系统内部的域名映射规则(hosts文件中),如果已经有映射了,那么就会直接去对应的ip地址;

windows下hosts文件目录:C:\Windows\System32\drivers\etc\hosts

8.jpg

修改添加上 zidanmall.com 的映射,ip为我们虚拟机的ip;

修改hosts后要重启电脑,如果不想重启,执行以下两步:

cmd
ipconfig /displaydns   //显示DNS缓存        
ipconfig /flushdns     //删除DNS缓存

然后我们访问虚拟机上的nginx试试:

10.jpg

DNS配置成功;

三、使用Nginx反向代理将所有zidanmall.com的请求都转到product商品服务

1、首先,要了解Nginx的配置结构:

11.jpg

2、使用nginx负载均衡 zidanmall.com 到 网关gateway

2.1、在上游服务器配置 负载均衡服务器(因为暂时我只部署了一台网关gateway):

12.jpg

2.2、在下游配置反向代理(zidanmall.conf是我复制得/conf.d/default.conf配置文件修改的)

15.jpg

注意:

这里的proxy_set_header配置,我们后面网关需要以Host断言,但是正常情况下,Nginx做反向代理转发的时候,会丢掉很多信息,Host就是其中一个,这样的话,后面断言肯定就没有办法生效,所以我们需要将header中的host补上;

2.3、重启nginx,访问 zidanmall.com

14.jpg

这是因为即使我们转到网关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 试试:

16.jpg

整个访问过程中都经历了哪些过程?

  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目录下

26.jpg

2、修改nginx 的配置文件 zidanmall.conf :

27.jpg

然后重启nginx容器;

3、修改项目template/index.html 文件:

将所有的静态资源前面都加上/static

href="index href="/static/index
src="index src="/static/index
检查其它漏网之鱼,比如背景图片之类的

4、重启项目检查:

28.jpg

所有的静态文件都可以获取到,即动静分离成功!


五、完成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/ 下:

29.jpg

4、配置DNS域名转发

192.168.174.141    search.zidanmall.com

5、配置nginx,将 search.zidanmall.com 全部转发给网关:

30.jpg

6、修改zidanmall-gateway的路由规则:

31.jpg

7、在zidanmall-search服务中增加web.SearchController.java:

@Controller
public class SearchController {
    @GetMapping({"/", "/list.html"})
    public String listPage(){
        return "list";
    }
}

8、打开页面,或从首页跳转:

32.jpg

到这里,检索页的动静分离,页面展示也全都完成了!

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐