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

需求场景

1、需要负载均衡指定几个服务,如果有服务出现预期错误,就会更换另外一个服务接口
2、合理优化一些细节日志输入和性能

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核心数量:
      nproc
      
    • 或者:
      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,根据服务器内存和预期流量调整。

相关推荐

  1. 关于nginx-如何优化

    2024-06-18 14:56:04       8 阅读
  2. 如何写作

    2024-06-18 14:56:04       21 阅读
  3. 如何使用EXCEL制作高效、美观成绩单

    2024-06-18 14:56:04       39 阅读
  4. 如何学习 redis

    2024-06-18 14:56:04       29 阅读
  5. 简历制作

    2024-06-18 14:56:04       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 14:56:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 14:56:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 14:56:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 14:56:04       18 阅读

热门阅读

  1. 互联网十万个为什么之什么是对象存储?

    2024-06-18 14:56:04       8 阅读
  2. PHP中的for循环:多方面探讨与实际应用

    2024-06-18 14:56:04       8 阅读
  3. Qt 插件框架

    2024-06-18 14:56:04       8 阅读
  4. 力扣1385.两个数组间的距离值

    2024-06-18 14:56:04       7 阅读
  5. 【Python高级编程】使用OpenCV进行图像旋转详解

    2024-06-18 14:56:04       7 阅读
  6. CSS行内样式书写规范及注意事项

    2024-06-18 14:56:04       5 阅读
  7. 查看mysql数据库端口号

    2024-06-18 14:56:04       7 阅读
  8. 美股 — “四巫日”

    2024-06-18 14:56:04       9 阅读
  9. MyBatis 插件机制详解

    2024-06-18 14:56:04       8 阅读
  10. 富格林:可信守则有效防范暗箱

    2024-06-18 14:56:04       9 阅读