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

2024-06-18 12:44
文章标签 优化 nginx 一份

本文主要是介绍关于一份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,根据服务器内存和预期流量调整。

这篇关于关于一份nginx-我是如何优化的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072026

相关文章

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J