根据Docker部署nginx并且实现https

本文详细介绍了如何在Docker中部署Nginx并启用HTTPS,涉及HTTPS的重要性和过程,包括配置证书、安装Docker、设置镜像加速以及生成并管理SSL证书。
摘要由CSDN通过智能技术生成

一、根据Docker部署nginx并且实现https

1.1、Docker中启用HTTPS有几个重要的原因

  1. 安全性:HTTPS通过加密数据传输,可以确保数据在传输过程中不被窃听或篡改。这对于保护敏感信息(如用户凭据、支付信息等)的传输至关重要。

  2. 数据完整性:HTTPS可以验证数据的完整性,确保数据在传输过程中没有被篡改或损坏。

  3. 信任度:使用HTTPS可以增强用户对网站的信任度,因为浏览器通常会显示安全的锁图标或绿色地址栏来指示连接是安全的。

  4. SEO优化:搜索引擎(如Google)通常会更喜欢使用HTTPS的网站,并将其排名更靠前。因此,启用HTTPS可以对网站的搜索引擎优化(SEO)产生积极影响。

  5. 合规性:一些法规和标准要求网站必须使用HTTPS来保护用户数据,如GDPR(欧盟一般数据保护条例)。

总的来说,启用HTTPS可以提高网站的安全性、可信度,同时符合法规要求,因此在Docker中启用HTTPS是一个很好的实践。

1.2、https介绍

Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议,HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

1.3、https过程

  • 客户端发起HTTPS请求

用户在浏览器里输入一个 https 网址,然后连接到服务器的 443 端口

  • 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥

  • 传送服务器的证书给客户端 证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等

  • 客户端解析验证服务器证书 这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框提示证书存在问题。如果证书没有问题,那么就生成一个随机值,然后用证书中公钥对该随机值进行非对称加密

  • 客户端将加密信息传送服务器 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加感解密了

  • 服务端解密信息 服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值

  • 服务器加密信息并发送信息 服务器将数据利用随机值进行对称加密,再发送给客户端

  • 客户端接收并解密信息 客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容

1.4、安装docker-20.10.18

修改主机名

[root@localhost ~]#hostnamectl set-hostname lyh
[root@localhost ~]#bash

环境配置

如果出现网络慢等情况,请修改一下配置

添加DNS2 

[root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33

...
DNS2=114.114.114.114

添加路由

[root@lyh ~]#vim /etc/sysctl.conf

net.ipv4.ip_forward=1

生效

[root@lyh ~]#sysctl -p
net.ipv4.ip_forward = 1

重新加载并重新启动网络

[root@lyh ~]#systemctl daemon-reload
[root@lyh ~]#systemctl restart network

1.4.1关闭防火墙

systemctl stop firewalld.service
setenforce 0

1.4.2安装依赖包

#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
-----------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
-----------------------------------------------------------------------------------------

1.4.3安装阿里云镜像源

#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

1.4.4安装20版本Docker

#安装 Docker
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io  ##安装20版本

1.4.5开启docker并设置为开机自启

systemctl start docker.service
systemctl enable docker.service
systemctl start docker.service
-----------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
-----------------------------------------------------------------------------------------

1.4.6配置镜像加速

浏览器访问 

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

1.4.6.1添加镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://5nbz4xnp.mirror.aliyuncs.com"]
}
EOF

1.4.6.2加载并重新启动docker服务
systemctl daemon-reload
systemctl restart docker.service

1.4.7查看docker版本

docker --version   #查看 docker 版本信息

1.4.8搜索镜像

格式:docker search 关键字

docker search nginx

1.4.9拉取(下载)镜像

格式:docker pull 仓库名称[:标签]

1.4.9.1拉取(下载) nginx 镜像
docker pull nginx

1.4.9.2拉取(下载) centos:7 镜像
docker pull centos:7

1.4.10 查看所有镜像

[root@lyh ~]#docker images

1.5如何获取证书

  • 在阿里云、华为云、腾讯云等云服务商那里申请一年有效期的免费证书或者购买证书

  • 在本地使用 openssl、mkcert、cfssl、certbot(Let's Encrypt)的工具生成本地私钥证书

通过阿里云获取证书

https://www.aliyun.com/product/cas?userCode=r3yteowb

1.6、docker部署nginx并且实现https

1.6.1准备证书

cd /opt    ##进入到/opt目录下

certificate.sh  ##上传证书脚本

vim certificate.sh

CA_SUBJECT="/O=kgc/CN=ca.kgc.com"
SUBJECT="/C=CN/ST=js/L=nj/O=kgc/CN=www.kgc.com"
SERIAL=34
EXPIRE=202002
FILE=kgc.com

openssl req  -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crt

openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key  -subj $SUBJECT -out ${FILE}.csr

openssl x509 -req -in ${FILE}.csr  -CA ca.crt -CAkey ca.key -set_serial $SERIAL  -days $EXPIRE -out ${FILE}.crt

chmod 600 ${FILE}.key ca.key

 1.6.1.1运行脚本
[root@localhost opt]#pwd  ##查看当前路径

[root@localhost opt]#ls   ##显示

bash certificate.sh   ##运行脚本

[root@localhost opt]#pwd  ##查看当前路径

[root@localhost opt]#ls   ##显示当前目录下所有文件

bash certificate.sh 

#执行该脚本后执行后会生成ca.crt  ca.key  certificate.sh  kgc.com.crt  kgc.com.csr  kgc.com.key 这几个文件,需要对其进行处理   
#  kgc.com.crt(购买者)   ca.crt(b颁发者)   www.kgc.com.key(验证钥匙)

1.6.1.2创建文件夹存放证书
#在/mnt下创建一个cert的文件夹,用于存放证书文件
pwd
mkdir /mnt/cert

mv /opt/www.kgc.com.crt /opt/www.kgc.com.key  /mnt/cert/

ll /mnt/cert/

1.6.2准备nginx.conf 和 index.html文件

[root@lyh ~]#cd /mnt/

[root@lyh mnt]#ls
cert

[root@lyh mnt]#echo "welcome to nanjing" > index.html

[root@lyh mnt]#ls
cert  index.html

[root@lyh mnt]#rz -E

[root@lyh mnt]#ls
cert  index.html  nginx.conf

[root@lyh mnt]#cat nginx.conf 

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;


events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;


    server {
        listen       80;
        listen 443 ssl;   
        ssl_certificate /mnt/www.kgc.com.crt;
        ssl_certificate_key /mnt/www.kgc.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        server_name www.kgc.com;
        root     /usr/share/nginx/html;


        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}

1.6.3生成容器

[root@lyh mnt]#docker run -itd -p 8080:80 -p 2808:443 -v /mnt/nginx.conf:/etc/nginx/nginx.conf -v /mnt/index.html:/usr/share/nginx/html/index.html -v /mnt/cert/:/mnt/ --name nginx nginx:latest

[root@lyh mnt]#docker ps -a

1.6.4浏览器验证证书

##浏览器输入
https://192.168.10.100:2808

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值