基于 Dockerfile 部署nginx服务(实现HTTPS功能)

ops/2024/10/21 7:54:08/

目录

前言

1、任务要求

nginx%E5%AE%89%E8%A3%85%E5%8C%85-toc" style="margin-left:0px;">2、建立工作目录并上传nginx安装包

3、创建自签名证书

nginx%20Dockerfile%20%E6%96%87%E4%BB%B6-toc" style="margin-left:0px;">4、创建 nginx Dockerfile 文件

nginx.conf%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-toc" style="margin-left:0px;">5、准备并编写 nginx.conf 配置文件

nginx%E9%A1%B5%E9%9D%A2%E6%96%87%E4%BB%B6-toc" style="margin-left:0px;">6、准备nginx页面文件

7、工作目录文件结构

8、生成镜像

8、启动容器并开启宿主机端口映射

9、浏览器测试


前言

Nginx作为一款高性能的Web服务器和反向代理服务器,被广泛应用于互联网领域。在今天的网络环境中,保障数据传输的安全性至关重要,而HTTPS协议正是保障数据安全的重要手段之一。本文将介绍如何通过Dockerfile部署Nginx服务,并实现HTTPS功能,为您的Web应用程序提供更加安全和可靠的服务

本文的目标是帮助读者了解如何利用Dockerfile部署Nginx服务,并实现HTTPS功能,为其Web应用程序提供更加安全、稳定的服务。我们将提供详细的步骤和实用的技巧,帮助读者顺利完成部署过程,并为其未来的Web开发项目奠定坚实的基础

1、任务要求

基于 dockfile 部署 nginx 并且实现https

宿主机

操作系统

IP地址

主要软件

Docker

CentOS 7

172.16.12.10

Docker 26.1.0

关闭防火墙和核心防护

systemctl disable --now  firewalld
setenforce 0

nginx%E5%AE%89%E8%A3%85%E5%8C%85" style="margin-left:.0001pt;text-align:left;">2、建立工作目录并上传nginx安装包

mkdir -p /opt/nginx/html
cd /opt/nginx     #在此路径上上传 nginx安装包

https://img-blog.csdnimg.cn/direct/7134c4dc143d4ec2b41699145a4c461f.png" width="692" />

https://img-blog.csdnimg.cn/direct/4e046880fae442cea2c6154131977722.png" width="700" />

3、创建自签名证书

mkdir -p /opt/nginx/ssl
cd /opt/nginx/sslvim certificate.sh
CA_SUBJECT="/O=dh/CN=ca.dh.com"
SUBJECT="/C=CN/ST=js/L=nj/O=dh/CN=www.dh.com"
SERIAL=34
EXPIRE=202002
FILE=dh.comopenssl req  -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crtopenssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key  -subj $SUBJECT -out ${FILE}.csropenssl x509 -req -in ${FILE}.csr  -CA ca.crt -CAkey ca.key -set_serial $SERIAL  -days $EXPIRE -out ${FILE}.crtchmod 600 ${FILE}.key ca.key

https://img-blog.csdnimg.cn/direct/00d76a906f5047d9b52d170a50b423b1.png" width="700" />

bash certificate.shcat dh.com.crt ca.crt > www.dh.com.crt
mv dh.com.key www.dh.com.key

 https://img-blog.csdnimg.cn/direct/e5e12bfdfc4e4585b46f76361dbe8223.png" width="651" />

nginx%20Dockerfile%20%E6%96%87%E4%BB%B6" style="margin-left:.0001pt;text-align:left;">4、创建 nginx Dockerfile 文件

FROM centos:7                           #基于centOS:7镜像作为基础镜像
MAINTAINER nginx image <dh>             #指定镜像的维护者信息
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make openssl openssl-devel 
# yum安装必要的软件包至镜像;
RUN useradd -M -s /sbin/nologin nginx   #创建nginx的系统用户,且无法登录系统
ADD nginx-1.24.0.tar.gz /usr/local/src/ #将nginx文件解压到/usr/local/src/目录下
WORKDIR /usr/local/src/nginx-1.24.0     #工作目录切换
RUN ./configure \                       #配置、编译并安装Nginx,指定安装路径、用户、用户组以及使用了 with-http_sub_status_module 模块
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \    #加载nginx_http_ssl_module模块,该模块是处理SSL/TLS连接所必需的
--with-http_stub_status_module && make -j 8 && make instal
ENV PATH /usr/local/nginx/sbin:$PATH    #将Nginx可执行文件路径添加到环境变量中
COPY ssl/ /usr/local/nginx/ssl/         #将证书文件和相关的密钥文件复制镜像目录中
ADD nginx.conf /usr/local/nginx/conf/   #将宿主机当前目录nginx.conf配置文件复制到镜像指定目录
ADD html/ /usr/local/nginx/html/ # 将本地的html目录添加到镜像中的/usr/local/nginx/html/目录下
RUN chmod 777 -R /usr/local/nginx/html/ #授权
EXPOSE 80                               #暴露容器的80端口,http
EXPOSE 443                              #暴露容器的443端口,https
VOLUME [ "/usr/local/nginx/html/" ]     #在Docker内创建挂载点
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ] 
#启动Nginx并以非守护进程方式运行

https://img-blog.csdnimg.cn/direct/0d126de829e64afea0b54a3e1e9d8198.png" width="700" />

nginx.conf%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" style="margin-left:.0001pt;text-align:left;">5、准备并编写 nginx.conf 配置文件

server {listen       80;server_name  www.dh.com;root /usr/local/nginx/html/;listen 443 ssl;      #指定 Nginx 监听端口 443,并启用 SSLssl_certificate /usr/local/nginx/ssl/www.dh.com.crt;#指定 SSL 证书的路径ssl_certificate_key /usr/local/nginx/ssl/www.dh.com.key;#指定 SSL 证书的密钥文件路径ssl_session_cache shared:sslcache:20m;#配置 SSL 会话缓存,提高 SSL 握手性能ssl_session_timeout 10m;#配置 SSL 会话超时时间为 10 分钟location / {root   html;#这是一个条件判断,如果请求协议是 HTTP,则执行重定向到相同的请求地址但使用 HTTPS 协议if ( $scheme = http ) {rewrite /(.*) https://$host/$1 permanent;}index  index.html index.htm;}
}

https://img-blog.csdnimg.cn/direct/bfb7beb43d164a268766f5cbd70b318b.png" width="700" />

nginx%E9%A1%B5%E9%9D%A2%E6%96%87%E4%BB%B6" style="margin-left:.0001pt;text-align:left;">6、准备nginx页面文件

cd /opt/nginx/html
echo "<h1>hello world</h1>" > index.html

https://img-blog.csdnimg.cn/direct/3c524b17383e49ad809e81c9cbcfa059.png" width="693" />

7、工作目录文件结构

yum install -y tree
tree /opt/nginx

https://img-blog.csdnimg.cn/direct/173e5a3482e54063ba04c5376fccd303.png" width="700" />

8、生成镜像

#基于当前目录中的 Dockerfile 构建一个名为 nginx,标签为 centos 的 Docker 镜像
docker build -t nginx:centos .#docker build: 这部分指示 Docker 命令行工具开始构建一个新的 Docker 镜像
#-t nginx:centos: 这部分使用 -t 标志来为构建的镜像指定一个标签,标签的格式通常是 <repository>:<tag>。在这里,nginx 是镜像的名称,centos 是标签,指明这个镜像是基于 CentOS 操作系统的 Nginx 镜像
# . : 这表示 Docker 将在当前目录中查找包含构建上下文的 Dockerfile。Dockerfile 是一个包含构建指令的文本文件,用于定义如何构建 Docker 镜像

https://img-blog.csdnimg.cn/direct/e941c50cf95e4b95a65f8ebdb595e871.png" width="700" />

8、启动容器并开启宿主机端口映射

#在 Docker 中运行一个名为 "nginx" 的容器,使用的镜像是 "nginx:centos"
docker run -d --name nginx -p 80:80 -p 443:443 -v /opt/nginx/html:/usr/local/nginx/html nginx:centos
#-d: 以守护进程模式运行容器,即在后台运行
#--name nginx: 将该容器命名为 "nginx"
#-p 80:80 -p 443:443: 将主机的 80 端口映射到容器的 80 端口,同时将主机的 443 端口映射到容器的 443 端口,这样可以通过主机的这些端口访问容器中运行的 Nginx 服务
#-v /opt/nginx/html:/usr/local/nginx/html: 将主机上的 /opt/nginx/html 目录挂载到容器中的 /usr/local/nginx/html 目录,这样可以实现主机和容器间的文件共享docker ps -a   #查看当前所有的容器

https://img-blog.csdnimg.cn/direct/dacd837993a8438a8a86eecca3e1e39a.png" width="700" />

9、浏览器测试

浏览器访问 http://172.16.12.10 会自动跳转到 https://172.16.12.10

https://img-blog.csdnimg.cn/direct/54602564ba36486bbdc8fe44404f0c27.png" width="700" />

https://img-blog.csdnimg.cn/direct/1cc45962ec5643de869052692eff2424.png" width="700" />

https://img-blog.csdnimg.cn/direct/4294765c39bf4931b4a8ebdc30bc9766.png" width="700" />


http://www.ppmy.cn/ops/34337.html

相关文章

Docker 入门与实践:从零开始构建容器化应用环境

Docker 一、docker常用命令docker ps 格式化输出Linux设置命令别名 二、数据卷相关命令挂载到默认目录&#xff08;/var/lib/docker&#xff09;挂载到本地目录 三、自定义镜像Dockerfile构建镜像的命令 四、网络自定义网络 五、DockerCompose相关命令 一、docker常用命令 dock…

K8s: Helm包管理工具的应用以及项目分环境部署

Helm 概述与安装 1 ) 概述 k8s中官方包管理工具, 官网: https://helm.sh/用 Yaml 管理多个应用同时部署 不需要在不同的yaml中写两遍&#xff0c;执行两遍解决一键部署的问题&#xff0c;联合部署 实现了部署的版本管理 可以实现版本回滚 应用和配置分离 2 &#xff09;安装 …

建材物料小程序商城的作用是什么

建材物料如门窗、马桶、涂料、瓷砖等有着大量需求者&#xff0c;传统模式中客户主要是同城进店咨询查看&#xff0c;但随时电商深入生活和商家模式更新&#xff0c;如今线上店铺消费也同样火热。 尤其是厂商或品牌经销商&#xff0c;无论线下还是线上都不影响生意开展&#xf…

如何从大量单号中,一键批量筛选出物流延误的单号

先来给大家看下例子&#xff0c;下面这个表格里面有3000多个单号 总有些单号物流信息不能及时更新&#xff0c;比如物流走到某中转站就停留在哪里超过24小时甚至更长时间&#xff0c;我们要如何慧眼识珠讯速找出来&#xff0c;及时查明原因并解决问题呢如下图&#xff1a;这个单…

SpringBoot的ProblemDetails

1.RFC 7807 之前的项目如果出现异常&#xff0c;默认跳转到error页面。或者是抛出500 异常。 但是对于前后端分离的项目&#xff0c;Java程序员不负责页面跳转&#xff0c;只需要 把错误信息交给前端程序员处理即可。而RFC 7807规范就是将异常 信息转为JSON格式的数据。这个…

​【收录 Hello 算法】第 3 章 数据结构

第 3 章 数据结构 Abstract 数据结构如同一副稳固而多样的框架。 它为数据的有序组织提供了蓝图&#xff0c;算法得以在此基础上生动起来。 本章内容 3.1 数据结构分类3.2 基本数据类型3.3 数字编码 *3.4 字符编码 *3.5 小结

etcdv3.6源码流程---Get

线性一致性需要满足的要求&#xff1a; 1.任何一次读都能读到某个数据的最近一次写的数据。即每次都是直接读最新的数据 2.系统中的所有进程&#xff0c;看到的操作顺序&#xff0c;都与全局时钟下的顺序一致。一旦某个请求在时刻a读到了版本为b的某个值&#xff0c;那么时刻a以…

(HAL)STM32F103C8T6——基于STM32的RFID智能门锁系统

一、系统实现的主要功能 a、显示系统初始化界面、功能菜单界面以及实时时间界面&#xff0c;后二者可以随时切换&#xff1b; b、具有4种模式&#xff0c;分别为刷卡解锁、IC卡信息管理、密码解锁、修改密码&#xff0c;并且有LED灯进行提示&#xff1b; c、成功解锁时&…