当前位置: 代码网 > 服务器>服务器>云虚拟主机 > docker部署nginx并且实现https的方法步骤

docker部署nginx并且实现https的方法步骤

2024年09月08日 云虚拟主机 我要评论
一、docker中启用https有几个重要的原因安全性:https通过加密数据传输,可以确保数据在传输过程中不被窃 听或篡改。这对于保护敏感信息(如用户凭据、支付信息等)的传输至关重要。数据完整性:h

一、docker中启用https有几个重要的原因

  • 安全性:https通过加密数据传输,可以确保数据在传输过程中不被窃 听或篡改。这对于保护敏感信息(如用户凭据、支付信息等)的传输至关重要。
  • 数据完整性:https可以验证数据的完整性,确保数据在传输过程中没有被篡改或损坏。
  • 信任度:使用https可以增强用户对网站的信任度,因为浏览器通常会显示安全的锁图标或绿色地址栏来指示连接是安全的。
  • seo优化:搜索引擎(如google)通常会更喜欢使用https的网站,并将其排名更靠前。因此,启用https可以对网站的搜索引擎优化(seo)产生积极影响。
  • 合规性:一些法规和标准要求网站必须使用https来保护用户数据,如gdpr(欧盟一般数据保护条例)。

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

二、https介绍

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

三、https过程

客户端发起https请求

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

  • 服务端的配置 采用https协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥
  • 传送服务器的证书给客户端 证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等
  • 客户端解析验证服务器证书 这部分工作是由客户端的tls来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框提示证书存在问题。如果证书没有问题,那么就生成一个随机值,然后用证书中公钥对该随机值进行非对称加密
  • 客户端将加密信息传送服务器 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加感解密了
  • 服务端解密信息 服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值
  • 服务器加密信息并发送信息 服务器将数据利用随机值进行对称加密,再发送给客户端
  • 客户端接收并解密信息 客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容

四、安装docker-20.10.18

systemctl stop firewalld.service
setenforce 0

#安装依赖包
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。
-----------------------------------------------------------------------------------------

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

#安装 docker-ce并设置为开机自动启动
yum install -y docker-ce-20.10.18 docker-ce-cli containerd.io  ##安装20版本

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

docker version   #查看 docker 版本信息

五、如何获取证书

  • 在阿里云、华为云、腾讯云等云服务商那里申请一年有效期的免费证书或者购买证书
  • 在本地使用 openssl、mkcert、cfssl、certbot(let's encrypt)的工具生成本地私钥证书

通过阿里云获取证书

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

六、docker部署nginx并且实现https

6.1准备证书

cd /opt
--------------------------------------
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

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(验证钥匙)


cat kgc.com.crt ca.crt > www.kgc.com.crt
mv kgc.com.key www.kgc.com.key

#在/mnt下创建一个cert的文件夹,用于存放证书文件
[root@localhost opt]#hostnamectl set-hostname zzz
[root@localhost opt]#su
[root@zzz opt]#mkdir /mnt/cert
[root@zzz opt]#mv /opt/www.kgc.com.crt /opt/www.kgc.com.key /mnt/cert
[root@zzz opt]#
[root@zzz opt]#ll /mnt/cert
总用量 8
-rw-r--r-- 1 root root 2201 5月   4 13:59 www.kgc.com.crt
-rw------- 1 root root 1704 5月   4 13:56 www.kgc.com.key

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

[root@zzz opt]#cd /mnt
[root@zzz mnt]#ls
cert
[root@zzz mnt]#echo "hello nanjing" > index.html
[root@zzz mnt]#ls
cert  index.html
[root@zzz mnt]#cat index.html 
hello nanjing
[root@zzz mnt]#rz -e
rz waiting to receive.
[root@zzz mnt]#ls
cert  index.html  nginx(1).conf
[root@zzz mnt]#mv nginx\(1\).conf nginx.conf
[root@zzz mnt]#ls
cert  index.html  nginx.conf
[root@zzz mnt]#pwd
/mnt
[root@zzz mnt]#
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 {
        }
    }
}

6.3生成容器

[root@zzz mnt]#docker run -itd -p 8080:80 -p 8082: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 
48944bdf4b31909ee2fc37c3acd16bf1fd4f804f6a00e9a011b9f8a5223657b5
[root@zzz mnt]#docker ps -a
container id   image          command                   created         status         ports                                                                            names
48944bdf4b31   nginx:latest   "/docker-entrypoint.…"   3 seconds ago   up 2 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8082->443/tcp, :::8082->443/tcp   nginx
[root@zzz mnt]#
[root@zzz mnt]#docker images
repository                      tag               image id       created       size
nginx                           latest            605c77e624dd   2 years ago   141mb

#生成容器,指定容器内80端口映射到本机的8080端口,指定容器内443端口映射到本机的8082端口  
#将/mnt/nginx.conf挂载到容器内/etc/nginx/nginx.conf下,
#将/mnt/index.html挂载到容器内的/usr/share/nginx/html/index.html,将容器内的index.html覆盖掉
#将/mnt/cert挂载到容器内的/mnt下,/mnt/cert下的所有文件都会出现在容器的/mnt下
#别名为  nginx  使用 nginx:latest 镜像生成并启动

6.4浏览器验证证书

到此这篇关于docker部署nginx并且实现https的方法步骤的文章就介绍到这了,更多相关docker部署nginx实现https内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com