欢迎关注我的微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注附送 100G 海量学习资源哟!!html
我的网站: https://www.exception.site/docker/how-to-config-ssl-with-docker-nginx前端
小哈最近收到阿里云短信,提示个站 www.exception.site 的云盾 SSL 证书(Https 证书)即将到期,须要赶快续费,否则没法继续使用 Https 协议来访问网站!nginx
这个 SSL 证书当时用的是阿里云免费型的,有效期为 1 年,到期后, 若是想继续使用这个证书,就得续费,并且费用还不低!面试
其实,要想继续使用 Https 协议,咱们能够在阿里云上再次申请一张 SSL 证书就能够了,时间一年,嗨呀,又能免费用一年。docker
本文小哈就主要介绍如何在 Ngnix 上配置 SSL 证书,从而让咱们的网站可以使用 Https 来访问,另外再附带说一下如何配置反向代理。安全
小哈的个站 Ngnix 搭建在容器当中,也就顺便说一下如何经过 Docker 快速安装&搭建 Ngnix 环境。bash
docker pull nginx:alpine
PS:我这里用的是 alipne 轻量级的镜像.服务器
下载完成后,经过 docker images
命令检查一下镜像是否下载成功:微信
docker run -d -p 80:80 --name nginx nginx:alpine
-p 80:80
: 将容器的 80 端口映射到宿主机的 80 端口上;-d
: 之后台方式运行镜像;--name
: 指定容器的名称为 nginx;命令执行完成后,经过 docker ps
命令确认一下容器是否启动成功。确认成功后,再访问一下 80
端口,看看 nginx 服务是否启动成功:session
复制运行中 nginx 相关配置文件到宿主机的指定路径下:
# 复制名称为 nginx 容器中 /etc/nginx/nginx.conf 文件夹到宿主机的 /docker/nginx 路径下 docker cp nginx:/etc/nginx/nginx.conf /docker/nginx # 复制名称为 nginx 容器中 /etc/nginx/conf.d 文件到宿主机的 /docker/nginx 路径下 docker cp nginx:/etc/nginx/conf.d /docker/nginx
复制完成后,查看指定路径的配置文件,以下:
访问连接 https://common-buy.aliyun.com/?spm=5176.2020520163.cas.3.4bf91BFD1BFDcm&commodityCode=cas#/buy:
PS: 注意,未注册阿里云帐号的童鞋,须要先注册一个帐号哟~
选择免费 DV SSL 证书 -> 当即购买,完成后,进入阿里云后台查看:
这里须要申请签发,填写相关信息后,等待签发经过便可。
签发经过后,咱们下载证书:
这里我选择的是 Ngnix, 固然了,你也能够选择 Tomcat、Apache、IIS 等。
下载下来后,解压,咱们能够看到包含两个文件:
接下来,咱们先在容器的挂载目录下建立 cert
证书目录:
将解压后的两个文件上传至该目录中。
这里须要说一下,小哈运行在 docker 容器中的 nginx 版本,信息以下:
由于个人 nginx 相对版本较高,可能和你们的配置文件目录有些不一样,但总体的没啥大的问题,该怎么配置,仍是怎么配置:
首先建立 ssl.conf
配置文件,专门用来配置 ssl
相关参数:
server { listen 443 ssl http2; server_name exception.site www.exception.site; client_max_body_size 4M; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; ssl on; root html; index index.html index.htm; ssl_certificate /etc/nginx/cert/2256161_www.exception.site.pem; ssl_certificate_key /etc/nginx/cert/2256161_www.exception.site.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/html; index index.html index.htm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://172.17.0.1:8090; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
根据阿里云的文档说明加上 ssl
相关参数,如 ssl 证书的两个文件目录,另外同时监听 443
端口。
再贴下 defaut.conf
配置文件内容:
server { listen 80; server_name exception.site www.exception.site; return 301 https://$host$request_uri; }
能够看到,主要对 http 80
端口主要作了一下 301
重定向,也就是说,若是前端使用的 http
访问,这里会重定向到 https 协议
。
再来讲说如何配置反向代理,先经过命令 ifconfig
命令获取 docker0
网卡的 ip 地址:
PS: 由于我须要反向代理的服务部署在本机的 Docker 容器中,因此用的这个 IP,若是你用的外网其余地址,可自行修改。
因为上面咱们已经新建了一个 ssl.conf
配置文件,这里就直接将反向代理的配置写在里面:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://172.17.0.1:8090;
经过配置,咱们反向代理到了 8090
端口的 Spring Boot 服务。
先删除以前启动的 nginx 容器:
docker rm -f nginx
成功后,回到配置文件的主目录,执行:
docker run -d \ -p 80:80 -p 443:443 \ --name nginx \ -v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /docker/nginx/conf.d:/etc/nginx/conf.d \ -v /docker/nginx/logs:/var/log/nginx \ -v /docker/nginx/cert:/etc/nginx/cert \ nginx:alpine
参数说明:
-p 80:80 -p 443:443
:将容器的 80、443 端口映射到主机的 80、443 端口;-v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf
:将容器中的 /etc/nginx/nginx.conf 文件挂载到宿主机中的 /docker/nginx/nginx.conf 文件;-v /docker/nginx/conf.d:/etc/nginx/conf.d
:将容器中 /etc/nginx/conf.d 目录挂载到宿主机中的 conf.d 目录下;-v /docker/nginx/logs:/var/log/nginx
:将容器中的 /var/log/nginx 目录挂载到宿主机中的 /docker/nginx/logs 目录下, 用以查看 Nginx 日志;-v /docker/nginx/cert:/etc/nginx/cert
: 将容器中的 /etc/nginx/cert 证书目录挂载到宿主机中的 /docker/nginx/cert 证书目录下;注意:由于我使用的阿里云服务器,同时还须要将 443 端口加入到安全组中,才能保证外界的正常访问 https 端口
运行命令成功后,经过 https 协议来访问咱们的网站域名 www.exception.site,看看是否可以正常访问,而且方向代理到 8090 端口的 Spring Boot 服务上:
OK! 大工告成。
本文中,咱们学习了如何经过 Docker 快速搭建 Nginx 环境,并对其配置 SSL 证书和反向代理,让网站可以以 Https 协议来访问。但愿童鞋们看完本文可以有所收获,下期见~
最近在网上发现一个不错的 PDF 资源《Java 核心知识&面试.pdf》分享给你们,不光是面试,学习,你都值得拥有!!!
获取方式: 关注公众号: 小哈学Java, 后台回复资源,既可免费无套路获取资源连接,下面是目录以及部分截图:
重要的事情说两遍,关注公众号: 小哈学Java, 后台回复资源,既可免费无套路获取资源连接 !!!