前言
`运行容器化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查看容器目录挂载情况,如图所示:
四、访问网页测试
在win10中的浏览器中访问`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 错误。如果问题仍然存在,可能需要进一步检查日志文件以获取更详细的错误信息。