实测运行容器化Nginx服务器
文章目录
- 前言
- 一、拉取Nginx镜像
- 二、创建挂载目录
- 三、运行容器化Nginx服务器
- 四、访问网页测试
- 总结
前言
`运行容器化Nginx服务器,首先确保正确安装docker,并且已启动运行,具体安装docker方法见笔者前面的博文《OpenEuler 下 Docker 安装、配置与测试实例》。本次实测环境如下:
1、宿主机win10,谷歌浏览器,IP地址为192.168.157.1
2、VMware Workstation pro17
3、安装1个虚拟机OpenEuler 24.03,IP地址为192.168.157.128
4、xshell7
具体实验思路如下:
虚拟机OpenEuler 24.03中安装docker,OpenEuler这里成为docker的宿主机, 使用docker命令拉取Nginx镜像,设置挂载目录及配置文件、项目文件,运行容器化Nginx,在Win10浏览器中测试访问Nginx服务器,显示网页效果。示意图如下:
一、拉取Nginx镜像
使用Docker命令拉取Nginx镜像:
docker pull nginx
二、创建挂载目录
在宿主机中根目录/root下,创建docker Nginx所需的挂载目录,包括配置文件目录、日志文件目录和项目文件目录:
mkdir /root/conf
mkdir /root/logs
mkdir /root/html
在 /root/nginx/conf目录下创建空配置文档:
vim nginx.conf
在 /root/html目录下创建项目文件,也就是测试网站的首页index.html,内容如图所示:
三、运行容器化Nginx服务器
运行Niginx服务的命令行如下:
docker run -id --name=nginx01 \-p 80:80 \-v $PWD/conf/nginx.conf:/etc/conf/nginx.conf \-v $PWD/logs:/var/log/nginx \-v $PWD/html:/usr/share/nginx/html \nginx
下面是对 docker run
命令的详细注释,这个命令用于启动一个名为 nginx01
的 Docker 容器,并对其进行配置:
docker run -id --name=nginx01 \ # 使用 'docker run' 命令创建并启动一个容器# '-i' 选项让容器的标准输入(STDIN)保持打开状态,即使没有附加到容器终端。# '-d' 选项让容器在后台运行。# '--name=nginx01' 为容器指定一个名称,这里是 'nginx01'。-p 80:80 \ # 将容器内部的端口 80 映射到宿主机的端口 80 上。# 这意味着访问宿主机的 80 端口将被转发到容器的 80 端口。-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \ # 将当前目录下的 'conf/nginx.conf' 文件挂载到容器的 '/etc/nginx/nginx.conf'。# '$PWD' 是当前工作目录的环境变量,它会被替换为当前目录的完整路径。# 这意味着你可以在宿主机上编辑 nginx 配置文件,而容器内的变化会立即生效。-v $PWD/logs:/var/log/nginx \ # 将当前目录下的 'logs' 目录挂载到容器的 '/var/log/nginx'。# 这样,nginx 的日志文件会保存在宿主机的 'logs' 目录中。-v $PWD/html:/usr/share/nginx/html \ # 将当前目录下的 'html' 目录挂载到容器的 '/usr/share/nginx/html'。# 这意味着你的网站文件应该放在宿主机的 'html' 目录中,nginx 会从这个目录提供静态文件服务。nginx # 指定要运行的 Docker 镜像,这里是 'nginx'。
这个命令将创建一个名为 nginx01
的容器,使用官方的 nginx
镜像,并设置端口映射和挂载卷,以便你可以在宿主机上管理 nginx 的配置文件、日志和网站内容。容器将在后台运行,并且可以通过访问宿主机的 80 端口来访问 nginx 服务。
执行完成命令,通过docker ps查看容器目录挂载情况,如图所示:
四、访问网页测试
在win7中的浏览器中访问`http://192.168.157.128,检查Nginx是否正常工作。结果如图所示:
总结
在实际测试过程中,可能出现无法访问Nginx服务器的情况,如图所示。
这里出现这种情况,是没有创建测试网站的index.html文件所导致的。
当你在使用 Docker 部署的 Nginx 时遇到 403 Forbidden 错误,这通常意味着服务器理解了请求但是拒绝执行。这个问题可能由多种原因引起,以下是一些可能的原因和相应的解决方案:
-
文件或目录权限不正确:
- 确保 Nginx 进程运行的用户(通常是
nginx
或www-data
)有权读取文件和访问目录。通常,web 目录的权限应设置为 755,文件权限设置为 644。 - 可以使用以下命令调整权限:
sudo chmod -R 755 /path/to/webroot sudo chown -R nginx:nginx /path/to/webroot
- 确保 Nginx 进程运行的用户(通常是
-
错误的 Nginx 配置:
- 检查 Nginx 配置文件,特别是
deny
指令、root
和alias
的配置,确保它们正确无误。移除或调整任何不恰当的deny
指令,确保root
或alias
指向正确的目录。 - 检查配置后,重新加载 Nginx 配置:
sudo nginx -t sudo systemctl reload nginx
- 检查 Nginx 配置文件,特别是
-
SELinux 阻止访问:
- 如果你确定 SELinux 配置是问题所在,可以临时更改 SELinux 的模式来确认这一点:
sudo setenforce 0
- 如果这解决了问题,考虑调整 SELinux 策略,而不是永久禁用它。使用
chcon
或semanage
命令为 Nginx 设置正确的访问上下文:sudo restorecon -Rv /path/to/webroot sudo semanage fcontext -a -t httpd_sys_content_t "/path/to/webroot(/.*)?" sudo restorecon -R /path/to/webroot
- 如果你确定 SELinux 配置是问题所在,可以临时更改 SELinux 的模式来确认这一点:
-
autoindex 关闭:
- 如果你希望列出目录中的文件,确保在 Nginx 配置文件中的相关
location
块中启用autoindex
:location /some/path/ {autoindex on; }
- 如果你希望列出目录中的文件,确保在 Nginx 配置文件中的相关
-
防火墙或安全软件限制:
- 检查是否有防火墙或安全软件阻止了对 Nginx 的访问。
-
Docker 端口映射配置错误:
- 确保在启动容器时正确使用了
-p
或--publish
参数指定端口映射。
- 确保在启动容器时正确使用了
-
Nginx 配置文件错误:
- 检查 Nginx 的配置文件是否有语法错误,可以使用
nginx -t
命令测试配置文件是否正确。
- 检查 Nginx 的配置文件是否有语法错误,可以使用
解决这些问题后,通常可以解决 403 Forbidden 错误。如果问题仍然存在,可能需要进一步检查日志文件以获取更详细的错误信息。
相关文章:

实测运行容器化Nginx服务器
文章目录 前言一、拉取Nginx镜像二、创建挂载目录三、运行容器化Nginx服务器四、访问网页测试 总结 前言 运行容器化Nginx服务器,首先确保正确安装docker,并且已启动运行,具体安装docker方法见笔者前面的博文《OpenEuler 下 Docker 安装、配…...

显示器接口种类 | 附图片
显示器接口类型主要包括VGA、DVI、HDMI、DP和USB Type-C等。 VGA、DVI、HDMI、DP和USB Type-C 1. 观察 VGA接口:15针 DP接口:在DP接口旁,都有一个“D”型的标志。 电脑主机:DP(D) 显示器:VGA(15针) Ref https://cloud.tenc…...

C++初阶——list
一、什么是list list是一个可以在序列的任意位置进行插入和删除的容器,并且可以进行双向迭代。list的底层是一个双向链表,双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来&…...
软件设计师-排序算法
冒泡排序 每一趟冒泡排序,从第0个元素开始,和后面的元素比较,如果大于就交换,否则不变,每次冒泡可以把最大的元素放到最后一个,第一次冒泡的终点是n-1,第二趟的是n-2,直到最后剩下一个元素。时间复杂度O(n…...

即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention
Transformer模型中的注意力模块是其核心组成部分。虽然全局注意力机制具有很强的表达能力,但其高昂的计算成本限制了在各种场景中的应用。本文提出了一种新的注意力范式,称为“代理注意力”(Agent Attention),以在计算效率和表示能力之间取得平衡。代理注意力使用四元组(Q…...

020_Servlet_Mysql学生选课系统(新版)_lwplus87
摘 要 随着在校大学生人数的不断增加,教务系统的数据量也不断的上涨。针对学生选课这一环节,本系统从学生网上自主选课以及课程发布两个大方面进行了设计,基本实现了学生的在线信息查询、选课功能以及教师对课程信息发布的管理等功能&…...

LabVIEW导入并显示CAD DXF文件图形 程序见附件
LabVIEW导入并显示CAD DXF文件图形 程序见附件 LabVIEW导入并显示CAD DXF文件图形 程序见附件 - 北京瀚文网星科技有限公司 LabVIEW广泛应用于自动化、数据采集、图形显示等领域。对于涉及CAD图形的应用,LabVIEW也提供了一些方法来导入和显示CAD DXF文件&#x…...

《云原生安全攻防》-- K8s安全防护思路
从本节课程开始,我们将正式进入防护篇。通过深入理解K8s提供的多种安全机制,从防守者的角度,运用K8s的安全最佳实践来保障K8s集群的安全。 在这个课程中,我们将学习以下内容: K8s安全防护思路:掌握K8s自身提…...
鸿蒙系统的发展及开发者机遇
鸿蒙系统(HarmonyOS)凭借其分布式架构和跨设备协同能力,展现出强大的发展潜力,在智能手机、智能穿戴、车载、家居等行业领域应用日益广泛,已逐渐形成与安卓、iOS 三足鼎立的市场格局。 开发者面临的挑战 1. 技术适应与…...

Java | Leetcode Java题解之第556题下一个更大元素III
题目: 题解: class Solution {public int nextGreaterElement(int n) {int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 %…...
OSPF动态路由配置实验:实现高效网络自动化
实验主题:OSPF动态路由协议配置 实验背景 OSPF(Open Shortest Path First)是一种基于链路状态的路由协议,广泛应用于中大型网络中。它采用Dijkstra算法计算最短路径,以确保网络中的路由更新快速、稳定,并能…...

CRM对企业有什么用?如何在实践中有效应用CRM系统?
在现在非常激烈竞争环境中,客户关系管理系统(CRM) 已经成为很多企业的“必备神器”,它不仅帮助企业高效地管理客户信息,还能提高客户满意度,增强客户忠诚度,最终推动销售增长和业务发展。然而&a…...

渗透测试之 -- Linux基础
声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、Openssl 1、openssl passwd -1 123 openssl一个开源加密工具包,用于各种解密、加…...

【excel】easy excel如何导出动态列
动态也有多重含义:本文将描述两种动态场景下的解决方案 场景一:例如表头第一列固定为动物,且必定有第二列,第二列的表头可能为猫 也可能为狗;这是列数固定,列名不固定的场景; 场景二࿱…...
[Linux] 进程间通信
进程间通信(Inter-Process Communication, IPC)是指不同进程之间的数据交换与协作。在Linux中,进程间通信有多种方式,每种方式都有其适用的场景。本文将介绍Linux中常见的几种进程间通信方法:管道(Pipe&…...

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数
CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a,输出数组中最大的数。提示:如使用排序库函数 sort(),需要包含头文件#include 。输入: 第一行是一个正整数 n(2<n<20); 第二行包含 n 个不重复的整…...

【Linux】sudo make install 命令往系统中安装了什么 指定目录进行安装
前情提要 假如我们通过源码安装的方式,安装一个动态库,风格往往是这样的: # 克隆仓库 git clone https://github.com/xxx.git# 进入仓库目录 cd xxx编译 # ... 可能有一些校验代码完整性的sh命令# 构建 mkdir build cd build cmake ..# 编…...

RT-DETR融合CVPR[2020]轻量化卷积模块Ghost Module模块
RT-DETR使用教程: RT-DETR使用教程 RT-DETR改进汇总贴:RT-DETR更新汇总贴 《GhostNet: More Features from Cheap Operations》 一、 模块介绍 论文链接:https://arxiv.org/abs/1911.11907 代码链接:GitHub - huawei-noah/Effici…...

发布rust crate
文章目录 一、cargo构建的配置类型:dev与release两种1.编译级别2.将 crate 发布到 Crates.io对整个库的注释pub use再导出功能发布crates.io 参考 一、cargo构建的配置类型:dev与release两种 $ cargo buildFinished dev [unoptimized debuginfo] targe…...
Sequelize+Sqlite3使用示例
以下是一个简单的示例,展示了如何在Node.js中使用Express框架、Sequelize ORM以及SQLite数据库来构建一个支持RESTful API的Web应用程序。 一,安装必要的npm包: npm install express sequelize sqlite3 body-parser 二,创建Jav…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...