登录
    Technology changes quickly but people's minds change slowly.

前后端分离项目docker下nginx https配置

技术宅 破玉 1377次浏览 0个评论

https 简介

  https 是目前最流行的http安全形式。使用https时。所有http请求和响应数据在发送到网络之前,都要进行加密。https在http下面提供了一个传输级的密码安全层。其大体结构如下:

  大部分困难的编码和解码都是在ssl库中完成的。所以web客户端和服务器在使用安全的http 协议时无需过多的修改其处理逻辑协议。通过https 建立安全的web事务后,浏览器就会自动获取所连接的服务器数字证书,浏览器收到证书会对签发机构进行检查,如果浏览器无法确认该证书的签名,就会向用户展示对话框。
  https 将http协议与一组强大的对称的、非对称和基于证书的加密技术结合在一起,保证安全的同时还保证灵活性。
  以下是http和https事务的对比

简化版的SSL握手如下:

使用https 可以保证我们的数据更加安全。

前端项目部署https

自己生成https 证书

  在本地调试的话,我们需要自己生成个https证书。

  #!/bin/bash
openssl genrsa -des3 -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -new -key server.key -out server.csr
openssl req -new -x509 -key server.key -out ca.crt -days 3650
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
ls -l

  我们在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]docker下配置nginx
  配置文件的主要配置如下:

upstream web { 
		ip_hash; 
		server 192.168.153.128:8080;
	}
	server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      server.crt;
        ssl_certificate_key  server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;


      location / {
			proxy_pass http://web;
	   }
    }

上面就是代理 我们的前端到 nginx https 下了,但是直接访问后端的话,会报错

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接口

其主要配置如下:

upstream gateway { 
		ip_hash; 
		server 192.168.10.241:2019;
	}
	server {
        listen       2019 ssl;
        server_name  localhost;

        ssl_certificate      server.crt;
        ssl_certificate_key  server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        location / {
			proxy_pass http://gateway;
		 }  
    }

然后把我们的前端调用api 的地址改成 https 代理的后端地址就可以了。
最后,附上 docker 下的部署脚本如下:

echo 'start docker nginx-https'
docker stop nginx-https
docker rm nginx-https
docker run -d -p 80:80 -p 443:443 -p 2019:2019 --name nginx-https --restart=always nginx
docker cp nginx-https.conf nginx-https:/etc/nginx/nginx.conf
docker cp server.crt nginx-https:/etc/nginx/server.crt
docker cp server.key nginx-https:/etc/nginx/server.key
docker restart nginx-https
echo 'success'

华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明前后端分离项目docker下nginx https配置
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址