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

目录

前言

1、任务要求

2、建立工作目录并上传nginx安装包

3、创建自签名证书

4、创建 nginx Dockerfile 文件

5、准备并编写 nginx.conf 配置文件

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

2、建立工作目录并上传nginx安装包

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

3、创建自签名证书

mkdir -p /opt/nginx/ssl
cd /opt/nginx/ssl

vim 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.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

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

 

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并以非守护进程方式运行

5、准备并编写 nginx.conf 配置文件

server {
        listen       80;
        server_name  www.dh.com;
        root /usr/local/nginx/html/;
        listen 443 ssl;      #指定 Nginx 监听端口 443,并启用 SSL
        ssl_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;
        }
}

6、准备nginx页面文件

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

7、工作目录文件结构

yum install -y tree
tree /opt/nginx

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 镜像

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   #查看当前所有的容器

9、浏览器测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/594074.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DS:顺序表、单链表的相关OJ题训练(1)

欢迎各位来到 Harper.Lee 的学习小世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu可以来后台找我交流哦&#xff01; 在DS&#xff1a;单链表的实现 和 DS&#xff1a;顺序表的实现这两篇文章中&#xff0c;我详细介绍了顺序表和单链表的…

CMakeLists.txt语法规则:foreach 循环基本用法

一. 简介 cmake 中除了 if 条件判断之外&#xff0c;还支持循环语句&#xff0c;包括 foreach()循环、while()循环。 本文学习 CMakeLists.txt语法中的循环语句。 CMakeLists.txt语法中 有两种 循环实现方式&#xff1a;foreach循环与 while循环。 二. CMakeLists.txt语法规则…

tomcat+maven+java+mysql图书管理系统1-配置项目环境

目录 一、软件版本 二、具体步骤 一、软件版本 idea2022.2.1 maven是idea自带不用另外下载 tomcat8.5.99 Javajdk17 二、具体步骤 1.新建项目 稍等一会&#xff0c;创建成功如下图所示&#xff0c;主要看左方目录相同不。 给maven配置国外镜像 在左上…

asp.net朱勇项目个人博客(3)

引文:按照书上的项目&#xff0c;我们最后实现管理端的三个增删改查的功能即可,相对与三个增删改查&#xff0c;文章&#xff0c;分类和留言&#xff0c;这里我们所需要用的的关联的一个表就是文章表&#xff0c;因为文章表每一个文章的增加显示和修改都需要对应的一个分类&…

Spring入门及注解开发

1 引言 自定义注解可以用来为代码添加元数据信息,简化配置,提高代码的可读性和可维护性。通过自定义注解,可以实现自定义的业务逻辑、约束条件、配置参数等功能。在Spring中,自定义注解常用于标记组件、配置依赖注入、AOP切面等。 自定义注解可以添加元数据信息,低代码框…

银行智能化数据安全分类分级实践分享

文章目录 前言一、数据安全智能分类分级平台建设背景二、数据安全分类分级建设思路和实践1、做标签– 数据安全标签体系2、打标签– 鹰眼智能打标平台 3.03、用标签– 全行统一“数据安全打标签结果”服务提供前言 随着国家对数据安全的高度重视,以及相关法律法规的出台,数据…

【linuxC语言】stat函数

文章目录 前言一、stat函数二、示例代码总结 前言 在Linux系统编程中&#xff0c;stat() 函数是一个非常重要的工具&#xff0c;用于获取文件的元数据信息。无论是在系统管理、文件处理还是应用开发中&#xff0c;都可能会用到 stat() 函数。通过调用 stat() 函数&#xff0c;…

ue引擎游戏开发笔记(31)——对角色移动进行优化:角色滑步处理

1.需求分析&#xff1a; 角色的移动与动画不匹配&#xff0c;角色移动起来像是在滑行。。。适当进行优化。 2.操作实现&#xff1a; 这个问题本质是角色的运动速度并没有匹配世界动画的运行速度&#xff0c;不论世界动画快慢于角色移动速度&#xff0c;都会感到有滑步感。所以…

基于 Spring Boot 博客系统开发(六)

基于 Spring Boot 博客系统开发&#xff08;六&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;五&#xff09;&#x1f…

适合打工人的赚钱软件有哪些?盘点5个实用的赚钱软件(真实靠谱)

在这个互联网时代&#xff0c;手机不仅仅是我们的通讯工具&#xff0c;更是我们赚钱的小助手。今天&#xff0c;就让我带你一探究竟&#xff0c;揭秘那些真实靠谱的赚钱软件&#xff0c;让你在家也能轻松赚钱&#xff01; 一、抖音极速版&#xff1a;刷视频也能赚钱 抖音极速版…

Flutter笔记:Widgets Easier组件库(11)- 使用提示吐丝

Flutter笔记 Widgets Easier组件库&#xff08;11&#xff09;使用提示吐丝 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this …

【前端学习——网络相关】浏览器同源策略和跨域

浏览器的同源策略 为什么要有&#xff1f; 帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。&#xff08;就是为了安全&#xff09; 如果非同源&#xff0c;共有三种行为受到限制 &#xff08;1&#xff09; Cookie、LocalStorage 和 IndexDB 无法读取。 &#xff08;2…

央视影音 视频下载 2

浏览器猫抓插件&#xff0c;拿到视频地址&#xff0c;这个地址的播放不正常&#xff0c;花屏。https://dh5.cntv.qcloudcdn.com/asp/h5e/hls/2000/0303000a/3/default/6edd15a0ebb3467993bec51a95be0e22/2000.m3u8 改一下地址&#xff0c;把代码中的h5e去掉。网址改为https://…

解决MySQL进行group by 字段返回大量异常结果

目录 问题 原因 解决方案 问题 看这条sql CH2O这个字段的取值只有1&#xff0c;2&#xff0c;3&#xff0c;正常进行group by 分类累加统计返回结果应该是这样&#xff1a; [{"CH2O": 2.0,"insufficient_weight": 142,"Normal_Weight": 164…

锁相环原理解析

在计算机和嵌入式系统中&#xff0c;常常要用锁相环来倍频&#xff0c;那么&#xff0c;锁相环是如何倍频的&#xff0c;其原理又是什么呢&#xff1f; 目录 1. 锁相环基本概念与构成1.1 鉴相器1.2 低通滤波器1.3 压控振荡器 2. 锁相环如何实现倍频3. 锁相环也会失效&#xff…

基于springboot+vue+Mysql的租房网站

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

[C++核心编程-01]----C++内存四区详细解析

前言 当程序运行时&#xff0c;操作系统会为程序分配一块内存空间&#xff0c;这块内存空间被划分为不同的区域&#xff0c;每个区域有其独特的作用和管理方式。四个区域分别为&#xff1a;堆、栈、全局/静态存储区和常量存储区。每个区域都有不同的作用和特点&#xf…

夏目友人帐所有妖怪名单

夏目友人帐妖怪名单 夏目友人帐 第一季 2008.07.07第1话&#xff1a;猫和友人帐 / 猫と友人帐 菱垣 狞影 斑第2话&#xff1a;露神之祠 / 露神の祠 露神 濯第3话&#xff1a;八原的怪人 / 八ツ原の怪人 一只目 牛头&#xff08;中级妖怪&#xff09;第4话&#xff1a;时雨与少女…

PHP源码_众筹商城

众筹商城源码 众筹商品平台 商城加共识元富之路 网上商城众筹 前端是编译后的&#xff0c;后端PHP&#xff0c;带商城 运行截图 源码贡献 https://githubs.xyz/boot?app39 部分数据库表 CREATE TABLE ti_shopro_store (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,nam…

英语复习之英语形近词总结(二)

接着总结形近词 单词释义例句 impress 英 /ɪmˈpres/ 美 /ɪmˈpres/ vt.盖印&#xff1b;强征&#xff1b;传送&#xff1b;给予某人深刻印象 vi.给人印象。印象&#xff0c;印记&#xff1b;特征&#xff0c;痕迹 1.It didnt impress me as a good place to live. 那地方…