今天我们来讲一讲怎么用docker部署nginx,并通过nginx部署ssl证书
第一步、安装nginx
docker pull nginx:latest
老样子通过 docker images去查看是否安装成功
第二步、接下来启动nginx
启动之前我们现在根目录的/opt/docker_v/nginx下新建四个文件夹,分别为conf,conf.d, html , logs ,用来映射配置文件
docker run --name nginx -d -p 80:80 -p 443:443 -p 3900:3900 -p 3700:3700 -v /opt/docker_v/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /opt/docker_v/nginx/html:/usr/share/nginx/html -v /opt/docker_v/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker_v/nginx/logs:/var/log/nginx nginx
此时运行会报错
看字面意思是说nginx.conf不是一个文件夹,是否确定将一个文件夹映射到一个文件中,这个问题困扰了我好久,查了很多资料,终于找到了解决办法,如下:
1、首先运行 :docker run --name nginx -p 8086:80 -d nginx
注意:这个命令不会将配置文件映射出来
2、通过docker cp命令将刚刚运行的nginx容器中的相关配置文件拷贝到我们后需要映射的目录下
docker cp 07e55c69a133:/etc/nginx/conf.d/default.conf /opt/docker_v/nginx/conf.d/default.conf
docker cp 07e55c69a133:/usr/share/nginx/html /opt/docker_v/nginx/html
docker cp 07e55c69a133:/etc/nginx/nginx.conf /opt/docker_v/nginx/conf/nginx.conf
docker cp 07e55c69a133:/var/log/nginx /opt/docker_v/nginx/logs
3、docker rm -f 刚刚运行的nginx容器,他的使命已经结束了
4、再次运行我们之前的命令
docker run --name nginx -d -p 80:80 -p 443:443 -p 3900:3900 -p 3700:3700 -v /opt/docker_v/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /opt/docker_v/nginx/html:/usr/share/nginx/html -v /opt/docker_v/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker_v/nginx/logs:/var/log/nginx nginx
这个时候就不会报错了,通过浏览器打开我们的域名地址
第三步、通过nginx反向代理转发
假如我们有一个项目,端口号为8086,此时如果通过域名去访问,必须加上端口号才能访问,如:http://api.mofang.cn:8086 ,因为服务器默认的端口号为80,只有端口号为80的项目才可以不需要额外加上端口号
此时我们就可以用nginx做一个代理转发,具体步骤如下
1、进入到我们之前映射的配置目录,找到nginx.conf文件
添加一下代码
server {
listen 80;#端口号
server_name api.mofang.top;//配置好的二级域名
location / {
proxy_pass http://公网IP:8086;
root /usr/share/nginx/html;
index index.html index.htm;
}
}
配置好以后 重启nginx
docker restart nginx
这个时候,我们的项目就通过nginx代理到了我们的8086端口上,通过刚刚的二级域名就能直接访问了,不需要加端口了
第四步、前两天我在阿里云上申请了一个免费的ssl证书,今天一起搞了
如何申请请看这 https://yq.aliyun.com/articles/637307
证书部署步骤如下
1、首先将下载下来的证书添加的服务器的/opt/docker_v/nginx/conf/ca目录下
2、通过docker cp拷贝到nginx容器内部的/etc/nginx/ca目录下
注意:容器内部ca文件夹需要自己去mkdir
docker cp /opt/docker_v/nginx/conf/ca/4468778_api.mofang.top.pem e0b892b8ac43:/etc/nginx/ca/4468778_api.mofang.top.pem
docker cp /opt/docker_v/nginx/conf/ca/4468778_api.mofang.top.key e0b892b8ac43:/etc/nginx/ca/4468778_api.mofang.top.key
3、配置nginx.conf文件,在文件下方加上以下代码
server {
#SSL 访问端口号为 443 docker映射端口3700
listen 443 ssl;
#填写绑定证书的域名
server_name api.mofang.top;
#证书文件名称
ssl_certificate ca/4468778_api.mofang.top.pem;
#私钥文件名称
ssl_certificate_key ca/4468778_api.mofang.top.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://公网IP:8086;
}
}
接下来重启nginx,就OK了
最后提一句:nginx配置过程中不是一帆风顺,大家一定要用好映射出来的logs文件,里面有错误日志,错误一目了然,可以给大家减少许多时间。