关于一份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

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

服务器雪崩的应对策略之----SQL优化

SQL语句的优化是数据库性能优化的重要方面,特别是在处理大规模数据或高频访问时。作为一个C++程序员,理解SQL优化不仅有助于编写高效的数据库操作代码,还能增强对系统性能瓶颈的整体把握。以下是详细的SQL语句优化技巧和策略: SQL优化 1. 选择合适的数据类型2. 使用索引3. 优化查询4. 范式化和反范式化5. 查询重写6. 使用缓存7. 优化数据库设计8. 分析和监控9. 调整配置1、

Java中如何优化数据库查询性能?

Java中如何优化数据库查询性能? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java中如何优化数据库查询性能,这是提升应用程序响应速度和用户体验的关键技术。 优化数据库查询性能的重要性 在现代应用开发中,数据库查询是最常见的操作之一。随着数据量的增加和业务复杂度的提升,数据库查询的性能优化显得尤为重

设置Nginx缓存策略

详细信息 Nginx服务器的缓存策略设置方法有两种:add_header或者expires。 1. add_header 1)语法:add_header name value。 2)默认值:none。 3)使用范围:http、server、location。 配置示例如下: add_header cache-control "max-age=86400";#设置缓存时间为1天。add

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

Docker Compose--安装Nginx--方法/实例

原文网址:Docker Compose--安装Nginx--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker Compose如何安装Nginx。 目录结构 ├── config│   ├── cert│   │   ├── xxx_bundle.pem│   │   └── xxx.key│   ├── conf.d│   └── nginx.co

nginx 8051#0: *4 recv() failed (104: Connection reset by peer) while reading response header from u

环境    php7   nginx1.8.0    nginx   报错  500  GATWAY网关错误 2017/08/28 10:45:42 [error] 7975#0: *333 recv() failed (104: Connection reset by peer) while reading response header from upstream, clien

nginx 504 Gateway Time-out

环境:PHP7.1,NGINX,Mysql 问题描述: 本地写了一个需要执行比较长时间的脚本,放到了php-fpm里面跑。用一个链接调用起这个脚本。发现第一次调用的时候,需要等比较久的时间,但是如果在执行期间再次请求这个链接。第二个请求的链接会返回504。甚至,直接在脚本最开始的地方中断都还是报 504. 但是如果请求其他链接,可以正常请求。 nginx 返回码、、 504 Gateway

linux匹配Nginx日志,某个字符开头和结尾的字符串

匹配 os=1 开头, &ip结尾的字符串 cat 2018-06-07.log | egrep -o ‘os=1.*.&ip’ 存入日志。然后使用submit 前面和后面的值去掉,剩下就是需要的字符串。 cat 2018-06-07.log | egrep -o ‘os=1.*.&ip’ >log.log