基于 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/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

bash certificate.shcat 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,并启用 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;}
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子电器架构刷写 --- Bootloader大揭秘

电子电器架构刷写 — Bootloader大揭秘 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自…

c语言刷题——输出图案

1.输出用“*”组成的X形图案 题目&#xff1a;请打印用“*”组成的X形图案 描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。 输出描述&#xff1a; 针对每行输…

Ubuntu18.04 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 解决方法

解决办法&#xff1a; ssh-keygen -R 192.168.11.11 注意根据自己的实际地址 参考博客&#xff1a;【linux】WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 解决方法_warning: remote host identification has changed!-CSDN博客

大语言模型中的第一性原理:Scaling laws

大语言模型的尺度定律在大语言模型的训练过程中起到了非常重要的作用。即使读者不参与大语言模型的训练过程&#xff0c;但了解大语言模型的尺度定律仍然是很重要的&#xff0c;因为它能帮助我们更好的理解未来大语言模型的发展路径。 1. 什么是尺度定律 尺度定律&#xff08…

Docker入门篇来啦~

文章目录 1虚拟化技术1.1 硬件级虚拟化1.2 操作系统级虚拟化 2 Docker是什么2.1 Docker介绍2.2 容器和虚拟机的区别2.3 为什么使用Docker 3 Docker运行环境部署3.1 Docker安装3.2 Docker服务启动 4 Docker核心组件4.1 镜像4.1.1 镜像的基本概念4.1.2 镜像的组成结构4.1.3 镜像的…

Java 三大特性之继承

目录 一、为什么需要继承&#xff1f; 二、继承概念 三、继承的语法 四、子类访问父类成员 五、super关键字 六、继承关系下的构造方法 七、继承关系下的初始化 八、protected关键字 九、继承的三种方式 十、final关键字 十一、继承和组合 一、为什么需要继承&#…

C语言——rand函数

一、rand函数 这是一个在 C 标准库 <stdlib.h> 中定义的函数&#xff0c;用于生成伪随机数&#xff0c;默认情况下&#xff0c;它生成从 0 到 RAND_MAX 的伪随机数&#xff0c;其中 RAND_MAX 是一个常数&#xff0c;通常是 32767。 1、函数原型&#xff1a; 2、函数返回…

k8s Dashboard 运维维护记录

k8s Dashboard 运维维护记录 k8s Dashboard 运维维护记录 Q1&#xff1a;需要使用firefox浏览器访问 提示了证书错误NET::ERR_CERT_INVALID&#xff0c;原因是由于物理机的浏览器证书不可用 需要注意的是&#xff0c;若提示“连接不安全”的警告时&#xff0c;点击“高级”…

ImageNet的下载及解压简易版本

ImageNet下载 官方下载 https://www.cnblogs.com/devilmaycry812839668/p/15590629.html 百度网盘迅雷下载 链接是个种子&#xff08;只要下载12年版本的&#xff0c;不要全下载&#xff09; https://pan.baidu.com/s/1MEjNh6evha2hcdrQXjNv8w?pwdyzza 下载后解压 解压trai…

SAP保税区业务方案

1. 保税区背景&#xff1a; 是经国务院批准设立的、海关实施特殊监管的经济区域&#xff0c;是我国目前开放度和自由度最大的经济区域。其功能定位为“保税仓储、出口加工、转口贸易”三大功能。根据现行有关政策&#xff0c;海关对保税区实行封闭管理&#xff0c;境外货物进入…

05 - 步骤 JSON output

简介 JSON Output 步骤用于将 Kettle 中的行流数据写出到 JSON 格式的文件或流中。它允许用户将 Kettle 中处理过的数据以 JSON 格式进行输出&#xff0c;适用于各种数据处理和交换场景。 什么是行流数据&#xff1f; preview data 中的每一个字段都是一个行流数据 使用 场…

www.fastssh.com SSH over WebSockets with CDNs

https://www.fastssh.com/page/create-ssh-cdn-websocket/server/这其实不是标准的websocket报文(服务器响应报文无Sec-Websocket-Accept字段)&#xff0c;所以无法使用github.com/gorilla/websocket包&#xff1a;GET / HTTP/1.1 Host: hostname:8080 User-Agent: Go-http-cli…

vue-html5-editor富文本编辑器抓取网络图片本地化

在vue中使用vue-html5-editor做的文章内容编辑器&#xff0c;至于怎么引用可另行百度&#xff0c;网络上有很多介绍&#xff1b;本文主要介绍如何在复制粘贴的时候跳过跨域限制和禁止外站的图片请求问题。 本文的方法比较笨拙&#xff0c;一起交流学习。 在研究使用vue-html5…

关于测试用例

目录 一 测试用例介绍 二 写用例的好处 三 不适合写用例的情况 一 测试用例介绍 测试用例由测试来写&#xff0c;编写时间在需求评审和设计评审&#xff08;如有&#xff09;结束后&#xff0c;需求提测前&#xff0c;用例依赖需求文档来编写。一般包含用例标题&#xff0c…

ubuntu20配置深度学习环境

目录 系统环境安装anaconda文件的安装anaconda环境配置anaconda换中科大源常用的anaconda命令 安装显卡驱动安装CUDA下载cudnn安装pytorch更换conda源选择对应的pytorch版本进行安装 系统环境 ubuntu20&#xff0c;安装了ros noetic。 参考博客主要有&#xff1a; https://g…

javascript 练习 写一个简单 另类录入 电脑组装报价表 可打印

数据格式 &#xff08;1代表cpu、2代表主板、3代表内存、。。。&#xff09; 1i3 12100 630 2H610 480 3DDR4 3200 16G 220 4500G M.2 299 5300W电源 150 6小机箱 85 7GT 730G 4G 350 8WD 2T 399 9飞利浦 24Led 580 主代码 Html JS <!DOCTYPE html> <html lang&qu…

Linux zImage image是什么

2024年5月4日&#xff0c;周六下午 Linux zImage是Linux内核的一种压缩格式。在Linux系统中&#xff0c;内核通常以zImage格式存储在启动介质&#xff08;如硬盘、闪存等&#xff09;上&#xff0c;并由引导加载程序加载到内存中执行。 zImage是一种压缩的内核映像格式&#x…

Python学习笔记------pycharts模块

pyecharts模块简介 Echarts是个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到众多开发者的认可&#xff0c;而python是门富有表达力的语言&#xff0c;很适合用于数据处理&#xff0c;当数据分析遇上数据可视化时pyechart…

EPAI手绘建模APP演示板、材质编辑器、样式编辑器

(11) 更多 图 74 更多工具栏 ① 演示板&#xff1a;打开关闭演示板。演示板用来显示从设备导入的模型图纸图片或者打开模型建模教程网页&#xff0c;是建模过程中一个辅助功能。有些设备有小窗口功能有些没有&#xff0c;对于没有小窗口功能的设备&#xff0c;通过演示板能够在…

LeetCode--质数

Q: 输出 100 以内所有质数 1.0 /* 第一层循环控制检查到哪个数* 第二层通过遍历除以每个比他小的数的方式,检查每个数是不是质数* 由于要遍历检查,设置一个标记,只要任意一次循环可以整除,我们就设置该标记为不是质数 */boolean isPrime true;for (int i 2; i < 100; i)…