介绍两种部署方式,一直接部署在 linux 服务器上,二先安装 docker,然后通过 docker 部署
sudo dnf update -y
systemctl stop firewalld
systemctl disable firewalld
# 查看防火墙状态
firewall-cmd --state
方法 1:通过 RockyLinux 默认仓库安装
sudo dnf install nginx -y
方法 2:通过 Nginx 官方仓库安装
sudo tee /etc/yum.repos.d/nginx.repo > /dev/null <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
注:上面仓库同时添加了稳定版(Stable)和主线开发版(Mainline)
# 稳定版本专注于提供一个经过广泛测试的版本,它通常被认为更适合生产环境。
# 主线版本包含最新的特性、改进和错误修复,并且可能会引入新的功能。适合想要尝试最新功能、参与社区反馈或者对灵活性有更高需求的用户。
# 确保另一个版本是禁用状态(如果两个都启用,默认会选择优先级更高的那个,这取决于具体的配置):
# 启用 stable 版本
sudo dnf config-manager --enable nginx-stable
# 禁用 stable 版本
sudo dnf config-manager --disable nginx-stable
# 启用 mainline 版本
sudo dnf config-manager --enable nginx-mainline
# 禁用 mainline 版本
sudo dnf config-manager --disable nginx-mainline
# 查看启用了哪个 Nginx 仓库
dnf repolist all | grep nginx
# 查看 stable 可用版本
sudo dnf --disablerepo="*" --enablerepo="nginx-stable" list available nginx --showduplicates
# 查看 mainline 可用版本
sudo dnf --disablerepo="*" --enablerepo="nginx-mainline" list available nginx --showduplicates
# 安装最新版本
sudo dnf install nginx -y
# 安装特定版本,比如:1.20.2
sudo dnf install nginx-1.20.2 -y
sudo systemctl start nginx
sudo systemctl enable nginx
# 查看 Nginx 服务状态
sudo systemctl status nginx
# 浏览器访问服务器 IP 地址,服务正常的话能看到 Nginx 默认欢迎页面。
# 查看当前安装的 Nginx 版本
nginx -v
# 添加阿里云docker-ce仓库
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 列出当前系统中所有可安装的 docker-ce 版本,并按照版本号从高到低进行排序,同时显示重复的版本。
dnf list docker-ce --showduplicates | sort -r
# 安装最新版本 docker-ce,也可以指定版本安装(dnf install -y docker-ce-3:28.1.1-1.el9)
dnf install -y docker-ce
# 启用Docker Cgroup用于限制进程的资源使用量,如CPU、内存资源
# 创建目录,存放 docker 的配置文件
mkdir -p /etc/docker
# 创建并写入 /etc/docker/daemon.json 文件,设置 Docker 使用 systemd 作为 Cgroup 驱动
# registry-mirrors 配置:docker 镜像加速器的地址列表。
cat > /etc/docker/daemon.json <
# 拉取最新版本镜像
docker pull nginx
# 拉取特定版本镜像,比如:1.28.0
docker pull nginx:1.28.0
如果只是运行基本 Nginx 容器,不挂载文件和目录到容器,无需执行此步骤
# 创建一个名为 temp-nginx 的临时容器,但不启动它,用来复制官方镜像中的默认配置和文件到宿主机上。
docker create --name temp-nginx nginx:1.28.0
# 将容器内 /etc/nginx/conf.d 目录下的所有内容复制到宿主机的 /data/nginx/conf
docker cp temp-nginx:/etc/nginx/conf.d /data/nginx/conf
# 将容器内默认的静态资源目录 /usr/share/nginx/html 复制到宿主机的 /data/nginx/html
docker cp temp-nginx:/usr/share/nginx/html /data/nginx/html
# 将容器内主配置文件 nginx.conf 复制到宿主机的 /data/nginx 目录下
docker cp temp-nginx:/etc/nginx/nginx.conf /data/nginx
# 删除临时容器
docker rm temp_nginx
方式一:直接使用 docker run 命令
# 运行基本 Nginx 容器,测试使用
sudo docker run -d -p 80:80 --name nginx nginx:1.28.0
# 运行自定义配置的 Nginx 容器,推荐这种
sudo docker run -d \
--name nginx \
-p 80:80 \
-p 443:443 \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf:/etc/nginx/conf.d \
-v /data/nginx/logs:/var/log/nginx \
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
--restart unless-stopped \
nginx:1.28.0
方式二:使用 Docker Compose(推荐)
version: '3.8'
services:
nginx:
image: nginx:1.28.0
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- /data/nginx/html:/usr/share/nginx/html
- /data/nginx/conf:/etc/nginx/conf.d
- /data/nginx/logs:/var/log/nginx
- /data/nginx/nginx.conf:/etc/nginx/nginx.conf
restart: unless-stopped
docker compose -f nginx.yaml up -d
# 列出正在运行的容器,查看 Nginx 容器状态
docker ps
# 列出所有容器(包括停止的)
docker ps -a
# 查看日志
docker logs nginx
# 进入容器,查看当前安装的 Nginx 版本
[root@nginx ~]# docker exec -it nginx bash
root@769b57182ab3:/# nginx -v
nginx version: nginx/1.28.0
# 浏览器访问服务器 IP 地址,服务正常的话能看到 Nginx 默认欢迎页面
# Nginx 主配置文件
# 更多配置信息可以参考:
# * 官方英文文档: http://nginx.org/en/docs/
# * 官方俄文文档: http://nginx.org/ru/docs/
# 设置运行 Nginx 的用户(通常为 nginx 用户)
user nginx;
# 设置工作进程数量,auto 表示自动根据 CPU 核心数设置
worker_processes auto;
# 设置错误日志路径及级别,默认是 error.log,记录错误信息
error_log /var/log/nginx/error.log;
# 设置 Nginx 主进程 PID 文件的存放路径
pid /run/nginx.pid;
# 加载动态模块配置(如 ngx_http_gzip_module 等),具体模块位置在 /usr/share/nginx/modules/
include /usr/share/nginx/modules/*.conf;
# 事件处理模块配置
events {
# 每个工作进程的最大并发连接数(包括客户端连接、代理连接等)
worker_connections 1024;
}
# HTTP 协议相关配置
http {
# 定义访问日志的格式,main 是日志名称,后续可引用
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 设置访问日志路径和使用的日志格式
access_log /var/log/nginx/access.log main;
# 启用高效文件传输模式(sendfile),适合静态资源传输
sendfile on;
# 启用 tcp_nopush,提高网络传输效率(TCP_CORK)
tcp_nopush on;
# 启用 tcp_nodelay,禁用 Nagle 算法,加快小数据包传输速度
tcp_nodelay on;
# 客户端连接保持活动的超时时间(秒)
keepalive_timeout 65;
# 设置 MIME 类型哈希表的最大大小,影响支持的文件类型数量
types_hash_max_size 4096;
# 包含 MIME 类型定义文件,用于识别不同后缀的文件类型(如 text/html、image/png)
include /etc/nginx/mime.types;
# 默认文件类型,如果未匹配到任何 MIME 类型,则使用此类型
default_type application/octet-stream;
# 加载 /etc/nginx/conf.d 目录下的所有 .conf 文件作为虚拟主机配置
include /etc/nginx/conf.d/*.conf;
# 默认的 server 块(虚拟主机)
server {
# 监听 IPv4 的 80 端口(HTTP)
listen 80;
# 监听 IPv6 的 80 端口
listen [::]:80;
# 定义服务器名,_ 表示这是一个默认虚拟主机,处理没有匹配到其他 server_name 的请求
server_name _;
# 设置网站根目录,即请求 "/" 会映射到这个目录下查找文件
root /usr/share/nginx/html;
# 加载 /etc/nginx/default.d 目录下的所有配置文件,用于扩展默认 server 功能
include /etc/nginx/default.d/*.conf;
# 自定义 404 页面
error_page 404 /404.html;
# 处理对 /404.html 的访问请求(防止递归跳转)
location = /404.html {
}
# 自定义 5xx 错误页面
error_page 500 502 503 504 /50x.html;
# 处理对 /50x.html 的访问请求
location = /50x.html {
}
}
# TLS/HTTPS 配置模板(当前被注释,需要启用时取消注释)
# server {
# # 监听 443 端口,启用 SSL 和 HTTP/2
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
#
# # 设置域名(server_name 应替换为实际域名)
# server_name _;
#
# # 设置 HTTPS 网站根目录
# root /usr/share/nginx/html;
#
# # SSL 配置:指定证书和私钥路径
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
#
# # 设置 SSL 会话缓存,提升性能
# ssl_session_cache shared:SSL:1m;
#
# # 设置 SSL 会话超时时间
# ssl_session_timeout 10m;
#
# # 使用系统默认加密套件
# ssl_ciphers PROFILE=SYSTEM;
#
# # 优先使用服务端加密套件(增强安全性)
# ssl_prefer_server_ciphers on;
#
# # 加载默认 HTTPS 配置文件
# include /etc/nginx/default.d/*.conf;
#
# # 自定义 404 页面
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# # 自定义 5xx 错误页面
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}