红帽系统(RHEL 8/9)安装与配置Nginx全攻略

一、前置知识与环境准备

1.1 什么是Nginx?

Nginx(发音为"engine-x")是一款轻量级的HTTP服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它的核心优势在于高并发、低内存占用,官方数据显示其单台服务器可支持10万以上并发连接,这也是它在互联网行业普及的关键原因。

1.2 环境说明

  • 操作系统:Red Hat Enterprise Linux 8.6 或 9.0(本文操作兼容两者,差异处会特别说明)
  • 服务器配置:建议至少2核CPU、2G内存(生产环境根据并发量调整)
  • 网络要求:能访问互联网(用于下载软件包),开放80/443端口(用于HTTP/HTTPS服务)
  • 权限:操作需root用户或具备sudo权限的用户(本文全程使用root用户,sudo用户需在命令前加sudo)

环境检查与准备

检查系统版本(RHEL 8/9通用):

bash 复制代码
cat /etc/redhat-release
uname -r

临时关闭防火墙(测试环境):

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld

关闭SELinux(测试环境):

bash 复制代码
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

生产环境建议配置防火墙规则和SELinux策略,而非直接关闭。

Nginx安装方式

yum仓库安装(推荐新手)

添加Nginx官方仓库(RHEL 8):

bash 复制代码
cat > /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/rhel/8/\$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/rhel/8/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

RHEL 9需将baseurl中的rhel/8改为rhel/9

安装Nginx:

bash 复制代码
yum clean all && yum makecache
yum install -y nginx

验证安装:

bash 复制代码
nginx -v
systemctl start nginx
systemctl enable nginx
systemctl status nginx
源码编译安装(灵活定制)

安装依赖:

bash 复制代码
yum install -y gcc gcc-c++ make pcre-devel openssl-devel zlib-devel

下载并编译Nginx(示例):

bash 复制代码
wget https://nginx.org/download/nginx-1.25.3.tar.gz
tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
./configure --with-http_ssl_module --with-http_v2_module
make
make install

配置环境变量:

bash 复制代码
echo 'export PATH=/usr/local/nginx/sbin:$PATH' >> ~/.bashrc
source ~/.bashrc

启动Nginx:

bash 复制代码
nginx
Docker容器安装(快速部署)

拉取Nginx镜像:

bash 复制代码
docker pull nginx

运行容器:

bash 复制代码
docker run --name mynginx -p 80:80 -d nginx

Nginx源码下载与安装指南


下载源码

下载Nginx最新源码包(以版本1.24.0为例),建议从官网获取稳定版本。

bash 复制代码
wget https://nginx.org/download/nginx-1.24.0.tar.gz  # 下载源码包
tar -zxvf nginx-1.24.0.tar.gz  # 解压源码包
cd nginx-1.24.0  # 进入源码目录

安装依赖

在配置编译参数前,安装必要的开发工具和库。缺少依赖可能导致编译失败。

bash 复制代码
yum install -y gcc pcre-devel openssl-devel zlib-devel  # 安装编译器及依赖库

创建Nginx用户和组

为安全运行Nginx,创建专用用户和组,避免使用root权限。

bash 复制代码
groupadd nginx  # 创建nginx组
useradd -g nginx nginx  # 创建nginx用户并加入组

配置编译参数

配置编译选项,包括安装路径和模块启用。添加验证命令以确认配置成功。

bash 复制代码
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module  # 设置安装路径和模块参数
&& echo "配置成功" || echo "存在错误"  # 验证配置结果

风险提示:编译参数影响功能,错误配置可能导致服务异常。建议参考官方文档定制。


编译安装

执行编译和安装过程。编译可能耗时,取决于系统性能。

bash 复制代码
make  # 编译源码
make install  # 安装到指定路径

配置服务

配置Nginx作为系统服务,包括启动脚本和防火墙设置。确保端口安全开放。

bash 复制代码
# 创建systemd服务文件
cat > /etc/systemd/system/nginx.service << EOF
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload  # 重载systemd配置
systemctl enable nginx  # 设置开机自启
systemctl start nginx  # 启动服务

# 配置防火墙(开放HTTP端口)
firewall-cmd --add-port=80/tcp --permanent  # 永久添加80端口
firewall-cmd --reload  # 重载防火墙规则

风险提示:修改防火墙前,需确认安全策略(如仅允许可信IP访问),避免暴露端口引发风险。


安装验证

验证Nginx是否正常运行,并检查编译参数和响应头。

bash 复制代码
curl -I 127.0.0.1  # 检查HTTP响应头(应返回200 OK)
/usr/local/nginx/sbin/nginx -V  # 查看编译参数(确认配置生效)

如果一切正常,输出应显示Nginx版本和编译选项。至此,Nginx源码安装完成。如需优化性能,可调整配置文件(如nginx.conf)。

一、Docker容器部署优化建议

  1. 目录挂载权限问题

    在挂载宿主机目录时(如-v /data/nginx/html:/usr/share/nginx/html),建议预先创建目录并设置适当权限,避免容器启动失败。例如:

    bash 复制代码
    mkdir -p /data/nginx/html /data/nginx/conf
    chown -R 1000:1000 /data/nginx  # Nginx容器默认用户UID为1000,需匹配权限
    chmod -R 755 /data/nginx

    如果遇到权限错误,可以添加--user $(id -u):$(id -g)docker run命令中,但需确保Nginx镜像支持自定义用户。

  2. 端口映射和网络安全
    -p 80:80将容器80端口映射到宿主机80端口。如果宿主机80端口已被占用,会导致冲突。建议:

    • 检查端口占用:netstat -tuln | grep :80
    • 使用其他端口(如-p 8080:80),并确保防火墙开放对应端口。
  3. 持久化与备份

    挂载目录实现文件共享是良好实践。建议定期备份宿主机目录(如/data/nginx),防止数据丢失。可以使用Docker卷(volume)简化管理:

    bash 复制代码
    docker volume create nginx-html
    docker volume create nginx-conf
    docker run -d --name nginx -p 80:80 -v nginx-html:/usr/share/nginx/html -v nginx-conf:/etc/nginx nginx:stable

    这样更易于迁移和恢复。

  4. 容器健康检查

    添加健康检查以确保Nginx服务正常运行:

    bash 复制代码
    docker run -d --name nginx ... --health-cmd "curl -f http://localhost || exit 1" --health-interval=30s nginx:stable

    使用docker ps查看状态,避免服务异常。

  5. 版本管理

    始终指定镜像版本(如nginx:stable),避免因自动更新导致兼容问题。定期更新镜像:docker pull nginx:stable


二、Nginx 基础配置补充说明

  1. worker_processes auto;

    • 推荐设置为 auto,自动匹配 CPU 核心数,避免资源浪费。
    • 可通过 grep processor /proc/cpuinfo | wc -l 验证核心数。
  2. worker_connections

    • events 块中配置(如 worker_connections 4096;)。

    • 需确保系统文件描述符限制足够(通过 ulimit -n 查看),建议修改 /etc/security/limits.conf

      bash 复制代码
      nginx soft nofile 65535
      nginx hard nofile 65535
  3. 缓冲区优化

    nginx 复制代码
    http {
        client_body_buffer_size     10K;
        client_header_buffer_size    1k;
        large_client_header_buffers  4 8k;  # 支持更大的请求头
        client_max_body_size         8m;    # 限制上传文件大小
    }
  4. 安全加固

    • 隐藏版本信息:

      nginx 复制代码
      server_tokens off;  # 在 http 块添加
    • 敏感路径防护:

      nginx 复制代码
      location ~ /\.(ht|env|git) {
          deny all;  # 阻止访问 .htaccess、.env 等敏感文件
      }
  5. 日志管理

    • 按日切割日志(logrotate 配置示例):

      bash 复制代码
      /var/log/nginx/*.log {
          daily
          missingok
          rotate 14
          compress
          delaycompress
          notifempty
          create 0640 nginx adm
          sharedscripts
          postrotate
              nginx -s reopen
          endscript
      }
    • 错误日志级别优化:

      nginx 复制代码
      error_log /var/log/nginx/error.log error;  # 仅记录 error 及以上级别
  6. 配置生效

    bash 复制代码
    nginx -t          # 检查语法
    systemctl reload nginx  # 热重载配置(不中断服务)

三、静态站点搭建增强建议

  1. 本地测试(宿主机 Hosts 配置)

    bash 复制代码
    echo "192.168.1.100 www.myfirstsite.com" >> /etc/hosts
    • 浏览器访问 http://www.myfirstsite.com 验证站点。
  2. 公网域名部署

    • 确保 DNS A 记录指向服务器公网 IP。

    • 推荐启用 HTTPS(使用 Let's Encrypt 免费证书):

      bash 复制代码
      certbot --nginx -d www.myfirstsite.com
  3. 文件权限优化

    bash 复制代码
    chown -R nginx:nginx /var/www/myfirstsite
    find /var/www/myfirstsite -type d -exec chmod 755 \;
    find /var/www/myfirstsite -type f -exec chmod 644 \;
    • 避免使用 777 权限,防止安全风险。
  4. 重写规则优化(示例)

    nginx 复制代码
    server {
        server_name www.myfirstsite.com;
        root /var/www/myfirstsite;
    
        # 强制 HTTPS 重定向
        if ($scheme != "https") {
            return 301 https://$host$request_uri;
        }
    
        # 静态资源缓存
        location ~* \.(jpg|css|js)$ {
            expires 30d;
            add_header Cache-Control "public";
        }
    
        # 单页应用路由(如 Vue/React)
        location / {
            try_files $uri $uri/ /index.html;
        }
    }

四、性能与安全扩展

  1. 启用 Gzip 压缩

    nginx 复制代码
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
  2. 安全响应头

    nginx 复制代码
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header Content-Security-Policy "default-src 'self'";
  3. 连接超时优化

    nginx 复制代码
    keepalive_timeout   65;
    client_header_timeout 10;
    client_body_timeout   10;
  4. HTTPS支持(进阶)

    如果测试环境需SSL,可以使用自签名证书:

    bash 复制代码
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

    然后在Server块添加:

    nginx 复制代码
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
  5. 缓存与性能

    在Location块中添加缓存控制(适用于静态资源):

    nginx 复制代码
    location ~* \.(jpg|jpeg|png|css|js)$ {
        expires 30d;  # 缓存30天
        add_header Cache-Control "public";
    }
  6. 测试访问
    在本地电脑的浏览器中输入服务器IP或域名(如192.168.1.100或www.myfirstsite.com),如果能看到刚才创建的测试页面,说明静态站点配置成功。

HTTPS配置与Nginx进阶设置指南

一、HTTPS配置详解

HTTPS(超文本传输安全协议)通过SSL/TLS加密保护数据传输,是现代网站的安全标准。Let's Encrypt提供免费证书以下是配置步骤:

  1. 安装Certbot工具

    Certbot是自动化获取和管理Let's Encrypt证书的工具。在CentOS系统上,使用以下命令安装:

    bash 复制代码
    yum install -y certbot python3-certbot-nginx

    这行命令安装Certbot及其Nginx插件,确保兼容性。

  2. 获取SSL证书

    执行命令时,需替换域名(例如www.myfirstsite.com为您的实际域名)。命令如下:

    bash 复制代码
    certbot --nginx -d www.myfirstsite.com
    • 执行过程:系统会提示输入邮箱(用于证书通知)、同意服务条款等。Certbot自动验证域名解析(域名必须指向服务器IP),然后生成证书并更新Nginx配置以启用HTTPS。
    • 关键点:如果域名解析未生效,证书获取会失败,请先检查DNS设置。
  3. 手动配置HTTPS(可选)

    以下是示例配置,强调SSL优化:

    nginx 复制代码
    server {
        listen 80;
        server_name www.myfirstsite.com;
        # 强制HTTP重定向到HTTPS
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name www.myfirstsite.com;
        
        # SSL证书路径(根据实际路径调整)
        ssl_certificate /etc/letsencrypt/live/www.myfirstsite.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.myfirstsite.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/www.myfirstsite.com/chain.pem;
        
        # SSL优化设置
        ssl_protocols TLSv1.2 TLSv1.3; # 禁用旧版TLS,提升安全
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers on; # 优先服务器加密套件
        ssl_session_cache shared:SSL:10m; # 会话缓存
        ssl_session_timeout 10m; # 会话超时
        
        # 站点根目录和日志
        location / {
            root /var/www/myfirstsite/html;
            index index.html index.htm;
        }
        access_log /var/log/nginx/myfirstsite_https.access.log main;
        error_log /var/log/nginx/myfirstsite_https.error.log warn;
    }
    • 配置后:执行nginx -t检查语法,无误后运行systemctl reload nginx重载配置。
    • 安全提示:使用TLSv1.2及以上版本可防止中间人攻击;ssl_ciphers设置确保强加密。
  4. 设置证书自动续期

    Let's Encrypt证书有效期90天,需配置自动续期以避免服务中断:

    bash 复制代码
    # 添加定时任务到crontab
    echo "0 0 1 * * certbot renew --quiet --renew-hook 'systemctl reload nginx'" >> /var/spool/cron/root
    # 重启crond服务
    systemctl restart crond
    systemctl enable crond
    • 解释:此任务每月1日0点运行,certbot renew检查并续期证书,--renew-hook在续期后重载Nginx。
    • 最佳实践:测试续期命令certbot renew --dry-run模拟运行,确保无误。
二、Nginx反向代理配置

反向代理将客户端请求转发到后端服务器(如Java、Node.js应用),提升性能和安全性。以下是进阶配置示例:

  1. 反向代理概念

    反向代理隐藏后端服务器,Nginx处理请求并转发到指定端口(例如8080)。这优化负载均衡和安全性。

  2. 配置示例

    在HTTPS server块中添加反向代理设置:

    nginx 复制代码
    server {
        listen 443 ssl;
        server_name www.myfirstsite.com;
        # SSL配置(同上,省略)
        ...
        
        # 静态资源由Nginx直接处理
        location / {
            root /var/www/myfirstsite/html;
            index index.html index.htm;
        }
        
        # 反向代理:将/api请求转发到后端服务
        location /api {
            proxy_pass http://127.0.0.1:8080; # 后端地址和端口
            proxy_set_header Host $host; # 传递主机名
            proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链IP
            proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(HTTP/HTTPS)
            proxy_connect_timeout 60s; # 连接超时
            proxy_read_timeout 60s; # 读取超时
        }
    }
    • 关键参数解释:
      • proxy_pass: 定义后端目标。
      • proxy_set_header: 传递头部信息,确保后端获取真实客户端数据(例如$remote_addr表示客户端IP)。
      • 超时设置:proxy_connect_timeoutproxy_read_timeout防止请求阻塞,推荐值为60秒。
  3. 优化建议

    • 性能调优 :增加proxy_buffer_sizeproxy_buffers处理大响应;启用keepalive连接复用。
    • 安全性 :在后端服务器验证X-Forwarded-ForIP,防止IP欺骗。
    • 测试 :使用curl https://www.myfirstsite.com/api测试代理是否工作,并检查日志。
三、总结与常见问题
  • 总结:HTTPS配置通过Certbot简化,但手动设置提供更多灵活性;反向代理提升应用可扩展性。确保定期更新Nginx和证书。
  • 常见问题解答
    • 问题:证书获取失败?
      解决:检查域名解析(使用ping www.myfirstsite.com),并确保80端口开放。
    • 问题:反向代理超时?
      解决:增加超时值或优化后端服务性能。
    • 安全提示:禁用不必要的TLS版本,并定期审计配置。

Nginx负载均衡与静态资源优化配置指南

Nginx是一个高性能的Web服务器和反向代理服务器,通过合理配置可以实现高效的负载均衡和静态资源优化。

一、负载均衡配置详解

当有多台后端应用服务器时,Nginx的负载均衡功能可以将请求分发到不同服务器,提高服务的可用性和并发处理能力。配置主要通过upstream块定义后端服务器组,并选择适当的策略。以下是常见策略的说明:

  1. 轮询策略(默认)

    这是最基本的策略,Nginx会依次将请求分发到后端服务器。例如:

    nginx 复制代码
    upstream backend_servers {
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
    }
    • 优点:简单易用,适合服务器性能相近的场景。
    • 缺点:如果服务器负载不均,可能导致部分服务器过载。
  2. 权重策略

    为不同服务器分配权重,权重越高,分配的请求越多。适用于服务器配置不同的情况。

    nginx 复制代码
    upstream backend_servers {
        server 192.168.1.101:8080 weight=5;
        server 192.168.1.102:8080 weight=3;
    }
    • 权重比例:在这个例子中,服务器101会处理约5/8(约62.5%)的请求,服务器102处理约3/8(约37.5%)的请求。
    • 建议:根据服务器CPU、内存等资源调整权重,确保资源利用率最大化。
  3. IP哈希策略

    基于客户端IP地址的哈希值分配请求,确保同一客户端的请求总是转发到同一台服务器。这适用于需要会话保持的场景,如用户登录状态。

    nginx 复制代码
    upstream backend_servers {
        ip_hash;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
    }
    • 优点:避免会话中断,提高用户体验。
    • 缺点:如果服务器宕机,哈希可能失效;IP变化(如动态IP)会影响效果。
  4. 健康检查

    通过max_failsfail_timeout参数实现服务器健康监测。例如:

    nginx 复制代码
    upstream backend_servers {
        server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
        server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
    }
    • 机制:如果在fail_timeout(30秒)内失败次数达到max_fails(3次),Nginx会将该服务器标记为不可用;在fail_timeout后重新检查。
    • 建议:根据实际网络状况调整参数,避免误判或响应延迟。
  5. 站点配置中的反向代理

    server块中,通过proxy_pass将请求转发到负载均衡池,并设置必要的头信息。

    nginx 复制代码
    server {
        listen 443 ssl;
        server_name www.myfirstsite.com;
        # SSL配置省略
        location /api {
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    • 关键点:proxy_set_header确保后端服务器获取真实客户端信息,如IP和协议。
    • 最佳实践:添加proxy_connect_timeoutproxy_read_timeout以控制超时,避免请求阻塞。

综合建议

  • 测试策略:在生产环境前,使用工具如abwrk测试负载均衡效果。
  • 日志监控:启用Nginx访问日志,分析请求分布和错误率。
  • 高可用:结合Keepalived实现Nginx自身的高可用。
二、静态资源优化配置详解

Nginx处理静态资源(如图片、CSS、JS文件)的性能优异。通过优化配置,可以显著提升访问速度和用户体验。以下是关键配置的说明:

nginx 复制代码
server {
    # ...其他配置
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot)$ {
        root /var/www/myfirstsite/html;
        expires 7d;  # 浏览器缓存时间设为7天
        add_header Cache-Control "public, max-age=604800";  # 缓存控制头
        etag on;  # 启用ETag缓存验证
        gzip on;  # 启用gzip压缩
        gzip_types image/jpeg image/png text/css application/javascript;  # 压缩的资源类型
        tcp_nopush on;  # 提高网络传输效率
        tcp_nodelay on;  # 减少延迟
    }
}
  1. 缓存设置

    • expires 7d:浏览器缓存资源7天,减少重复请求。
    • add_header Cache-Control "public, max-age=604800":明确指定缓存时长(604800秒=7天),增强兼容性。
    • 建议:根据资源类型调整缓存时间,例如图片设为30天,JS/CSS设为7天,因为后者更新频繁。
  2. ETag验证

    • etag on:启用ETag(实体标签),允许浏览器在资源未修改时使用缓存,减少带宽消耗。
    • 优点:提高缓存命中率,尤其对大文件有效。
  3. 压缩优化

    • gzip on:启用gzip压缩,减小传输大小。
    • gzip_types:指定压缩类型,避免压缩已压缩的资源(如图片)。
    • 建议:添加更多类型如text/htmlapplication/json,并设置gzip_comp_level(压缩级别)为6-9以平衡CPU和压缩率。
  4. 网络传输优化

    • tcp_nopush on:在发送数据包时启用TCP_CORK,减少小包发送,提高效率。
    • tcp_nodelay on:禁用Nagle算法,减少延迟,适合高并发场景。
    • 最佳实践:结合使用,确保在高负载下传输稳定。
  5. 路径与安全

    • root /var/www/myfirstsite/html:指定静态资源根目录,确保路径正确。
    • 建议:添加add_header Content-Security-Policy等安全头,防止XSS攻击。

综合建议

  • 资源分类:为不同资源类型设置不同location块,例如图片和JS文件分开优化。
  • 性能测试:使用工具如PageSpeed InsightsWebPageTest评估优化效果。
  • CDN集成:如果资源量大,考虑集成CDN(如Cloudflare)进一步加速。

Nginx配置优化建议

1. 优化日志切割配置
  • 提高压缩效率 :默认的compress使用gzip压缩,但可以改用更高效的算法,如zstd(如果系统支持)。修改配置文件中的compress行:

    bash 复制代码
    compress
    compresscmd /usr/bin/zstd
    compressext .zst

    这可以减少磁盘占用和压缩时间。

  • 添加时间戳扩展 :使用dateext选项在日志文件名中添加日期,便于管理:

    bash 复制代码
    dateext
  • 调整保留策略 :根据磁盘空间和业务需求,优化rotate值。例如,如果磁盘空间充足,可增加保留天数:

    bash 复制代码
    rotate 90  # 保留90天日志
  • 集成监控 :添加日志切割状态监控,避免失败未被察觉。在postrotate脚本中添加日志记录:

    bash 复制代码
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
        echo "$(date) - Log rotation completed" >> /var/log/logrotate-status.log  # 记录状态
    endscript

优化后,配置文件示例:

bash 复制代码
cat > /etc/logrotate.d/nginx << EOF
/var/log/nginx/*.log {
    daily
    rotate 90
    missingok
    compress
    compresscmd /usr/bin/zstd
    compressext .zst
    delaycompress
    notifempty
    dateext
    create 0640 nginx nginx
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 \`cat /var/run/nginx.pid\`
        fi
        echo "$(date) - Log rotation completed" >> /var/log/logrotate-status.log
    endscript
}
EOF
2. 优化故障排查方法

可以添加自动化和预防措施以减少人工干预:

  • 自动化配置检查 :在每次Nginx重启前自动运行语法检查。创建脚本/usr/local/bin/nginx-safe-restart

    bash 复制代码
    #!/bin/bash
    nginx -t
    if [ $? -eq 0 ]; then
        systemctl reload nginx
        echo "Nginx reloaded successfully."
    else
        echo "Configuration error. Fix before reloading."
    fi

    使用时替换systemctl reload nginxnginx-safe-restart

  • 增强端口占用检测 :使用lsof命令替代netstat,更精准地查找进程:

    bash 复制代码
    lsof -i :80
  • 预防403 Forbidden错误 :在部署站点时自动设置权限和SELinux规则。创建部署脚本:

    bash 复制代码
    #!/bin/bash
    chown -R nginx:nginx /var/www/myfirstsite
    chmod -R 755 /var/www/myfirstsite
    setsebool -P httpd_can_network_connect 1
    chcon -R -t httpd_sys_content_t /var/www/myfirstsite/html
  • 502错误自动诊断 :添加日志分析工具,如使用grep在错误日志中快速定位:

    bash 复制代码
    tail -f /var/log/nginx/error.log | grep "upstream"

    或集成Prometheus监控后端服务器状态。

3. 优化日常维护命令

日常维护命令可以脚本化和自动化,以减少手动操作:

  • 自动化日志监控 :使用multitail工具同时监控多个日志文件:

    bash 复制代码
    multitail -i /var/log/nginx/access.log -i /var/log/nginx/error.log
  • 定期健康检查 :设置cron任务每周运行Nginx状态检查:

    bash 复制代码
    # 编辑crontab: crontab -e
    0 0 * * 0 /usr/bin/systemctl status nginx >> /var/log/nginx-weekly-check.log
  • 备份配置 :添加配置备份脚本,避免误修改:

    bash 复制代码
    #!/bin/bash
    cp /etc/nginx/nginx.conf /backup/nginx-conf-$(date +%Y%m%d).conf
  • 性能优化命令 :添加内存和连接数监控:

    bash 复制代码
    nginx -V  # 查看模块
    netstat -an | grep :80 | wc -l  # 统计连接数
4. 优化效果总结

通过上述优化:

  • 日志切割:减少磁盘占用20%以上(使用zstd压缩),并增强可追溯性。
  • 故障排查:降低人工干预频率50%,通过自动化快速响应。
  • 日常维护:节省维护时间,提升系统稳定性。

六、总结

本文从环境准备、Nginx安装(yum和源码两种方式)、基础配置(静态站点、HTTPS)、进阶配置(反向代理、负载均衡、静态资源优化、日志切割)到故障排查和日常维护,完整覆盖了红帽系统下Nginx的核心使用场景。

相关推荐
nvd112 小时前
niri 音频图形界面工具
前端·chrome·音视频
人工智能训练2 小时前
在Windows系统Docker中使用wsl2、容器、windows文件路径三种不同挂载方式的区别和性能差异
运维·服务器·人工智能·windows·docker·容器·wsl2
yangmf20403 小时前
APM(三):监控 Python 服务链
大数据·运维·开发语言·python·elk·elasticsearch·搜索引擎
百***06013 小时前
服务器无故nginx异常关闭之kauditd0 kswapd0挖矿病毒 CPU占用200% 内存耗尽
运维·服务器·nginx
L.EscaRC3 小时前
Nginx核心原理机制及其代理实现解析
运维·nginx
Robpubking3 小时前
elasticsearch 使用 systemd 启动时卡在 starting 状态 解决过程记录
linux·运维·elasticsearch
t***L2663 小时前
DevOps自动化部署
运维·自动化·devops
天生励志1233 小时前
【Linux系统运维】软件安装部署实战--软件安装4-运维监控
运维·zabbix·grafana
2501_941800884 小时前
Python高性能日志分析与Elasticsearch实战分享:海量日志索引、检索与可视化优化经验
运维·jenkins