前后端分离项目docker下nginx https配置
https 简介
https 是目前最流行的http安全形式。使用https时。所有http请求和响应数据在发送到网络之前,都要进行加密。https在http下面提供了一个传输级的密码安全层。其大体结构如下:
大部分困难的编码和解码都是在ssl库中完成的。所以web客户端和服务器在使用安全的http 协议时无需过多的修改其处理逻辑协议。通过https 建立安全的web事务后,浏览器就会自动获取所连接的服务器数字证书,浏览器收到证书会对签发机构进行检查,如果浏览器无法确认该证书的签名,就会向用户展示对话框。
https 将http协议与一组强大的对称的、非对称和基于证书的加密技术结合在一起,保证安全的同时还保证灵活性。
以下是http和https事务的对比
简化版的SSL握手如下:
前端项目部署https
自己生成https 证书
在本地调试的话,我们需要自己生成个https证书。
1 | #!/bin/bash |
我们在linux 下利用 openssl 生成呢证书,生成的server.key 和server.crt 就是需要的文件。(参考 https://www.cnblogs.com/php-no-2/p/11276323.html)
其中Country Name填CN,Common Name填主机名也可以不填,如果不填浏览器会认为不安全.(例如你以后的url为https://abcd/xxxx….这里就可以填abcd),其他的都可以不填。
docker 下nginx 配置
没配置过的可以参考 ![docker下配置nginx](http://blog.magicdu.cn/585.html)
配置文件的主要配置如下:
1 | upstream web { |
上面就是代理 我们的前端到 nginx https 下了,但是直接访问后端的话,会报错
1 | but requested an insecure XMLHttpRequest endpoint ‘http://192.168.153.128:2019/api/hello’. This request has been blocked; the content must be served over HTTPS. |
大致意思就是https网站内不可以发送http请求,并且http请求直接被拦截并不发送到后台服务器。如何解决呢,由于我们后端都是一个个微服务,所以将后端都改成https 这种方式不科学,那么我们也可以向代理前端一样来使用nginx https 来代理http的后端。
nginx https 代理后端 http接口
其主要配置如下:
1 | upstream gateway { |
然后把我们的前端调用api 的地址改成 https 代理的后端地址就可以了。
最后,附上 docker 下的部署脚本如下:
1 | echo 'start docker nginx-https' |