关于一份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; # 将请求转发到上游服务器集群OCRproxy_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,根据服务器内存和预期流量调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CP AUTOSAR标准之FlashDriver(AUTOSAR_CP_SWS_FlashDriver)(更新中……)

1 简介和功能概述 该规范描述了AUTOSAR基础软件模块[1]Flash驱动程序的功能、API和配置。   此规范适用于内部和外部闪存的驱动程序。   闪存驱动程序提供读取、写入和擦除闪存的服务以及用于设置/重置写入/擦除保护的配置接口(如果底层硬件支持)。   在ECU的应用模式下,…

需要用来做3D家具展示的软件哪个网站更专业?

国内外的3D家具展示软件网站并且值得推荐的也就那么几家: 1、Cedreo,Cedreo 是一个在线3D家居设计平台,适合专业的房屋建筑商、改造商和室内设计师。它允许用户创建2D和3D平面图以及室内外效果图,拥有7000多件可定制的3D家具、材…

单元测试的思考与实践

1. 什么是单元测试 通常来说单元测试,是一种自动化测试,同时包含一下特性: 验证很小的一段代码(业务意义 或者 代码逻辑 上不可再分割的单元),能够更准确的定位到问题代码的位置 能够快速运行(…

opencv中文路径问题

目的 在windows系统上,就是直接用QT的utf8编码作为图片路径用在opencv读取或者写入函数,在路径当中含有中文时,会提示编码错误。 就是解决opencv中的中文路径的问题。 情况 代码如下: #pragma execution_character_set("…

AI框架之langchain

官方文档 简介 LangChain 是一个开源的 Python 库,旨在简化大语言模型(LLM)在应用程序中的使用和集成。它提供了一种结构化的方法来构建基于 LLM 的应用程序,并解决了许多常见的开发挑战。 LangChain 的核心组件 代理(Agents) 代理是 LangChain 中最强大的概念之一。代理可…

以CMDB为基础构建DevOps平台体系

在当今数字化转型的浪潮中,企业IT运维模式正从传统的资产管理向现代化的资源管理转变。配置管理数据库(CMDB)作为IT运维的核心组成部分,其在DevOps平台中的重要性愈加凸显。通过国信证券和招商银行的实际案例,我们将详…

编程牛人验证码怎么输入:深度剖析与策略指导

编程牛人验证码怎么输入:深度剖析与策略指导 在数字时代的浪潮中,编程牛人们时常面临着各种技术挑战,其中之一便是验证码的输入问题。验证码作为一种安全验证机制,旨在防止自动化脚本或机器人的恶意行为。但对于编程高手而言&…

YOLOv8改进 | 注意力机制 | 用于增强小目标感受野的RFEM

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进——点击即可跳转 近年来,基于深度学习的人脸检测算法取得了…

css 文字下划线 text-decoration

背景: 在某些时候需要给文字添加特殊样式。使用 text-decoration: underline; 来为段落文字添加下划线。也有其它文本装饰样式,例如: none:无装饰(去掉装饰)overline:上划线line-through&…

《珊瑚岛》是一款什么类型的游戏 苹果电脑如何玩到《珊瑚岛》

在众多电子游戏中,有些游戏因其独特的游戏体验和丰富的内容而脱颖而出,《珊瑚岛》便是其中之一。在游戏中你将离开宝京前往珊瑚岛,种植农作物、饲养动物、和岛民成为朋友。您不仅可以振兴该岛小镇,还可以保护和修复周围的珊瑚礁。…

C# OpenCV 部署RecRecNet广角图像畸变矫正

C# OpenCV 部署RecRecNet广角图像畸变矫正 目录 说明 效果 模型信息 项目 代码 下载 说明 ICCV2023 - RecRecNet: Rectangling Rectified Wide-Angle Images by Thin-Plate Spline Model and DoF-based Curriculum Learning 参考: https://github.com/Kang…

CleanMyMac中文版2024破解完美版本下载链接

CleanMyMac中文版,是一款功能强大的系统优化软件。它能够帮助你清理垃圾文件、卸载无用应用、优化内存使用等,让你的电脑运行更加流畅稳定。 CleanMyMac中文版具有智能扫描功能,能够自动识别电脑上的垃圾文件和冗余数据。它能够快速扫描整个…

IPython 使用技巧整理

IPython 是一个增强的 Python 交互式 shell,提供了许多实用的功能和特性,使得 Python 编程和数据科学工作变得更加便捷和高效。以下是一些 IPython 的使用技巧整理: 1. 自动补全和查询 Tab 补全:在 IPython 中,你可以…

【MongoDB 新搭档 Kafka】

对于做过数据处理,使用过消息队列的小伙伴 ,Kafka可以算是老朋友了,但是最近一个场景下,新的用法,让其变为了MongoDB的新搭档。 开始 从一个问题开始,熟悉MongoDB的小伙伴,可能使用过changeSt…

Java的三个接口Comparable,Comparator,Cloneable(浅拷贝与深拷贝)

Comparable 当我们要进行对象的比较的时候&#xff0c;我们是不能直接用>、< 这些符号直接进行比较的。 由于这是引用类型变量也是自定义类型变量&#xff0c;直接进行比较的时候&#xff0c;我们是通过对象的地址进行比较的&#xff0c;我们可以使用、! 进行两个对象的…

解决 pdf.js 出现 TypeError: key.split(...).at is not a function 报错问题

问题 使用pdf.js v2版本部分机型出现 TypeError: key.split(…).at is not a function 报错 解决 参考 https://github.com/wojtekmaj/react-pdf/issues/1465 方式一&#xff08;推荐&#xff09; import core-js/features/array/at;方式二 (解决了部分机型浏览器问题) if …

Spring Cloud 专题-前言篇(1)

引言 随着微服务架构的兴起&#xff0c;Spring Cloud 作为一套基于 Spring Boot 实现的云应用开发工具集&#xff0c;为开发者提供了在分布式系统&#xff08;如配置管理、服务发现、断路器、智能路由、微代理、控制总线等&#xff09;中快速构建一些常见模式的能力。本篇文档…

2024年大韩民国最佳品牌大赏 彭雨凡荣获“海外邀请特别奖”

14日&#xff0c;“2024年大韩民国最佳品牌大赏-韩流演艺大赏”颁奖典礼在韩国首尔永登浦区汝矣岛洞国会议员会馆第2会议室举办。 演员彭雨凡荣获“海外邀请特别奖”。 据悉&#xff0c;由大韩民国最佳品牌协会和世宗大王国民委员会&#xff08;理事长 LEE YUNTAE&#xff09…

关于IOMMU问题的扩展

关联CSDN&#xff1a; Steam Deck OLED WLAN下载速率过低问题的排查和解决-CSDN博客 前言 如前所述&#xff0c;Steam Deck OLED WLAN速率低问题和IOMMU有一定的关系&#xff0c;这里我们对IOMMU为什么会对速率有影响进行一个较深入的理解。 对于IOMMU我相信大家通过网上的…

模板引擎与 XSS 防御

在 View 层&#xff0c;可以解决 XSS 问题。在本书的“跨站脚本攻击”一章中&#xff0c;阐述了“输入检查” 与“输出编码”这两种方法在 XSS 防御效果上的差异。XSS 攻击是在用户的浏览器上执行的&#xff0c; 其形成过程则是在服务器端页面渲染时&#xff0c;注入了恶意的 H…