关于一份nginx-我是如何优化的

需求场景

1、需要负载均衡指定几个服务,如果有服务出现预期错误,就会更换另外一个服务接口

2、合理优化一些细节日志输入和性能

Nginx 配置文件(带注释)

nginx 复制代码
#user  nobody; # 以nobody用户运行Nginx进程
worker_processes  4; # 设置Nginx的工作进程数量为4,根据服务器的CPU核心数量调整。

error_log  logs/error.log error; # 指定错误日志文件路径和记录级别为error
#error_log  logs/error.log notice; # 可选,记录notice级别的日志
#error_log  logs/error.log info; # 可选,记录info级别的日志

pid        logs/nginx.pid; # 指定存储Nginx进程ID的文件路径

events {
    worker_connections  1024; # 每个工作进程允许的最大连接数
}

http {
    include       mime.types; # 包含MIME类型定义文件
    default_type  application/octet-stream; # 设置默认的MIME类型

    log_format upstreamlog '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent" '
                           '"$upstream_addr" "$upstream_response_time" "$upstream_status"'; 
    # 定义日志格式,记录上游服务器信息

    access_log logs/access.log upstreamlog; # 指定访问日志文件路径和日志格式

    sendfile        on; # 启用sendfile,提高文件传输效率
    tcp_nopush      on; # 优化TCP包的发送,减少网络包数量(与sendfile结合使用效果最佳)
    tcp_nodelay     on; # 禁用Nagle算法,防止网络包延迟发送

    keepalive_timeout  65; # 设置keep-alive超时时间为65秒

    gzip on; # 启用gzip压缩
    gzip_disable "msie6"; # 禁用IE6的gzip压缩
    gzip_vary on; # 启用Vary: Accept-Encoding头
    gzip_proxied any; # 启用代理请求的gzip压缩
    gzip_comp_level 6; # 设置gzip压缩级别,范围1-9,数字越大压缩率越高但CPU消耗越大
    gzip_buffers 16 8k; # 设置系统获取用于存储gzip压缩结果数据流的内存单位
    gzip_http_version 1.1; # 启用gzip压缩的HTTP协议版本
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 设置需要压缩的MIME类型

    upstream OCR {
        server xxx.xx.158.247:5594; # 定义上游服务器的IP地址和端口
        server xxx.xx.158.247:5595; # 定义上游服务器的IP地址和端口
        server xxx.xx.158.247:5596; # 定义上游服务器的IP地址和端口
        server xxx.xx.158.247:55971; # 定义上游服务器的IP地址和端口
    }

    server {
        listen       80; # 监听80端口
        server_name  localhost; # 定义服务器名称

        location / {
            proxy_pass http://OCR; # 将请求转发到上游服务器集群OCR
            proxy_set_header Host $host; # 设置Host头
            proxy_set_header X-Real-IP $remote_addr; # 设置X-Real-IP头
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置X-Forwarded-For头
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; # 定义当上游服务器返回特定错误时,将请求转发到下一个上游服务器
            proxy_connect_timeout 10s; # 设置代理连接超时时间为10秒
            proxy_read_timeout 60s; # 设置代理读取超时时间为60秒
            proxy_send_timeout 60s; # 设置代理发送超时时间为60秒
        }

        error_page   500 502 503 504  /50x.html; # 自定义错误页面
        location = /50x.html {
            root   html; # 设置错误页面的根目录
        }
    }
}

详细说明文档

1. 基本设置
  • user nobody;:指定Nginx进程的运行用户为nobody。
  • worker_processes 1;:设置工作进程数为1。
2. 日志设置
  • error_log logs/error.log error;:指定错误日志文件路径和记录级别为error。
  • #error_log logs/error.log notice;:可选,记录notice级别的日志。
  • #error_log logs/error.log info;:可选,记录info级别的日志。
  • pid logs/nginx.pid;:指定存储Nginx进程ID的文件路径。
3. 事件模块
  • worker_connections 1024;:每个工作进程允许的最大连接数。
4. HTTP 核心模块
  • include mime.types;:包含MIME类型定义文件。
  • default_type application/octet-stream;:设置默认的MIME类型。
5. 日志格式
  • log_format upstreamlog ...:定义日志格式,记录上游服务器信息。
  • access_log logs/access.log upstreamlog;:指定访问日志文件路径和日志格式。
6. 文件传输与TCP优化
  • sendfile on;:启用sendfile,提高文件传输效率。
  • tcp_nopush on;:优化TCP包的发送,减少网络包数量(与sendfile结合使用效果最佳)。
  • tcp_nodelay on;:禁用Nagle算法,防止网络包延迟发送。
7. 连接保持
  • keepalive_timeout 65;:设置keep-alive超时时间为65秒。
8. gzip 压缩
  • gzip on;:启用gzip压缩。
  • gzip_disable "msie6";:禁用IE6的gzip压缩。
  • gzip_vary on;:启用Vary: Accept-Encoding头。
  • gzip_proxied any;:启用代理请求的gzip压缩。
  • gzip_comp_level 6;:设置gzip压缩级别,范围1-9,数字越大压缩率越高但CPU消耗越大。
  • gzip_buffers 16 8k;:设置系统获取用于存储gzip压缩结果数据流的内存单位。
  • gzip_http_version 1.1;:启用gzip压缩的HTTP协议版本。
  • gzip_types ...:设置需要压缩的MIME类型。
9. 上游服务器
  • upstream OCR {...}:定义上游服务器集群OCR,包括多个IP地址和端口。
10. 服务器块
  • listen 80;:监听80端口。
  • server_name localhost;:定义服务器名称。
  • location / {...}:配置根路径的代理设置,将请求转发到上游服务器集群OCR,并设置相关头信息和超时。
  • error_page 500 502 503 504 /50x.html;:自定义错误页面。
  • location = /50x.html {...}:设置错误页面的根目录。

调整 worker_processesworker_connections 可以显著提升Nginx的性能和处理能力。以下是调整这两个参数的指南:

worker_processes

  • 定义:这个参数定义了Nginx创建的工作进程数量。
  • 最佳实践:通常设置为等于服务器的CPU核心数量,以便充分利用多核CPU的性能。

worker_connections

  • 定义:这个参数定义了每个工作进程可以同时处理的最大连接数。
  • 最佳实践:应该根据服务器的硬件资源和预期的流量来设置。如果设置得过低,会限制Nginx的并发处理能力。

具体调整步骤

  1. 确定CPU核心数量

    • 在Linux系统中,可以使用以下命令查看CPU核心数量:

      sh 复制代码
      nproc
    • 或者:

      sh 复制代码
      lscpu | grep '^CPU(s):'
  2. 根据核心数量调整 worker_processes

    • 如果服务器有4个CPU核心,worker_processes 应设置为4。
  3. 根据内存和预期流量调整 worker_connections

    • 例如,假设每个连接占用1KB的内存,服务器有8GB的可用内存,可以设置 worker_connections 为8192。
    • 此外,可以通过ulimit -n命令检查文件描述符限制,如果需要可以增加。

详细说明文档更新

1. worker_processes
  • worker_processes 4;:设置Nginx的工作进程数量为4,根据服务器的CPU核心数量调整。
2. worker_connections
  • worker_connections 8192;:设置每个工作进程可以同时处理的最大连接数为8192,根据服务器内存和预期流量调整。
相关推荐
七夜zippoe4 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6485 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满5 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠5 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9036 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技7 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀7 小时前
Linux环境变量
linux·运维·服务器
zzzsde7 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º9 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~9 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化