RockyLinux 9.5 部署 Nginx

介绍两种部署方式,一直接部署在 linux 服务器上,二先安装 docker,然后通过 docker 部署

一、直接部署在 Linux 服务器

1、准备工作

(1)更新系统软件包

sudo dnf update -y

(2)关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

# 查看防火墙状态
firewall-cmd --state

2、安装 Nginx

方法 1:通过 RockyLinux 默认仓库安装

sudo dnf install nginx -y

方法 2:通过 Nginx 官方仓库安装

(1)添加 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

(2)安装 Nginx

# 安装最新版本
sudo dnf install nginx -y

# 安装特定版本,比如:1.20.2
sudo dnf install nginx-1.20.2 -y

3、启动 Nginx 并设置开机自启

sudo systemctl start nginx
sudo systemctl enable nginx

4、验证安装

# 查看 Nginx 服务状态
sudo systemctl status nginx

# 浏览器访问服务器 IP 地址,服务正常的话能看到 Nginx 默认欢迎页面。

# 查看当前安装的 Nginx 版本
nginx -v

二、使用 docker 部署

1、安装 docker

# 添加阿里云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 <

2、拉取 Nginx 官方镜像

# 拉取最新版本镜像
docker pull nginx

# 拉取特定版本镜像,比如:1.28.0
docker pull nginx:1.28.0

3、初始化宿主机上的 Nginx 配置和内容目录,以便后续在运行容器时挂载这些目录

如果只是运行基本 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

4、运行 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(推荐)

(1)根目录下创建 nginx.yaml 文件,内容如下:
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
(2)启动服务
docker compose -f nginx.yaml up -d

5、验证安装

# 列出正在运行的容器,查看 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.conf 常见配置注释

# 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 {
    #     }
    # }

}

你可能感兴趣的:(nginx,运维,linux,docker)