前言

环境:centos7.9 nginx version: nginx/1.18.0

调整参数隐藏nginx软件版本号

执行:curl -I 192.168.43.120:82 会显示如下信息:

HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sun, 25 Apr 2021 15:22:26 GMT
Content-Type: text/html
Content-Length: 606
Last-Modified: Sun, 18 Apr 2021 15:24:50 GMT
Connection: keep-alive
ETag: "607c4f42-25e"
Accept-Ranges: bytes

这就暴露了web版本号和软件名称是 nginx/1.18.0, curl -I https://www.baidu.com/ 得到 Server: bfe/1.0.8.18,由此可见百度隐藏了软件名称,门户网站尚且如此,我们也要隐藏web版本号和软件名称。
隐藏nginx版本号:在配置文件中加 server_tokens off;默认是on状态,server_tokens参数可以在http、server、location中。

更改源码隐藏nginx软件名称及版本号

默认是不允许修改nginx名称的,这时因为商业及品牌展示等原因,但我们可以通过修改源码来实现修改软件名称:

更改nginx服务的默认用户

useradd -M -s /bin/false nginx                   #-s是指定shell为不登录shell,-M表示不创建家目录
./configure --user=nginx --group=nginx          #安装时指定用户和用户组
vim nginx.conf                                  #打开配置文件进行编辑
user nginx                                      #指定用户(worker 进程的用户指定为nginx,但master进程还是root身份运行的)

优化nginx服务的worker进程个数

vim nginx.conf                                   #打开配置文件进行编辑
worker_processes  1;                            #默认值是1个进程

在高并发高访问量的web服务场景中,必须开启多个worker进程来保证有足够多的进程来处理客户的请求,这就好比饭店,需要有多个服务员;而开启多少个worker进程这要根据网页的业务访问量来决定,官方建议初始的worker进程数量配置等于CPU的核数,当然在高并发的网站,worker进程数量等于CPU核数*2也是可以考虑的,这个worker进程数量具体的值不仅跟网站访问量、cpu核数相关,还和硬盘存储的数据和系统的负载等相关。

配置word进程最大打开的文件数

worker_rlimit_nofile  number;                        #worker_processes能打开的最大文件数

放置位置就在main标签块中,即放worker_processes 后即可,这个参数能改变worker_processes能打开的最大文件数。

优化绑定不同的nginx进程到不同的CPU上

我们知道,可能存在多个nginx进程跑在同在一个cpu上,这样就存在硬件资源的使用不均衡,这种情况可以将nginx的work进程绑定到不同的CPU上来解决,我们先了解一下CPU的概念,1个CPU上可以存在多个核心,比如2核心,那么总的CPU核心就是2,同理,2个CPU,每个CPU都有2核心的话,总的CPU核心就有4个核心。查看Linux系统的CPU信息在/proc/cpuinfo文件中。

grep -c processor /proc/cpuinfo                  # 查看有多少个CPU核数
lscpu | grep 'CPU(s)'|head -1 |awk '{print $2}'     #这样也可以查看总的CPU核数

worker_cpu_affinity 参数语法格式:

worker_cpu_affinity  cpumask;                        #worker_cpu_affinity参数必须放在main块中,即放worker_processes 后即可,cpumask为cpu的掩码

下面看一下配置示例:

worker_processes 2;                              # 2进程2核CPU的配置,01表示启用第一个CPU内核,10表示启用第二个CPU内核,下面以此类推
worker_cpu_affinity 01 10;worker_processes 4;                               # 4个进程4核CPU的配置
worker_cpu_affinity 0001 0010 0100 1000;worker_processes 8;                                 # 8个进程8核CPU的配置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000;worker_processes     4;                              #4个进程,2核CPU的配置
worker_cpu_affinity 01 10 01 10;worker_processes     2;                             #4核CPU,开启2个进程
worker_cpu_affinity 0101 1010;                      #0101表示开启第一个和第三个内核,1010表示开启第二个和第四个内核

说明:2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了,配置完毕后,平缓重启nginx。

nginx的事件处理模块优化

events {worker_connections  1024;
}

在events 块中可以设定nginx的事件处理模型,而nginx的事件处理模型有select、poll、kqueue、epoll、rtsig、dev/poll,其中select、poll都是标准的工作模式,kqueue、epoll是高效的事件处理模型,不同的是epoll用在Linux系统中,kqueue用在BSD系统中,对于Linux系统和Lin徐2.6+的内核,推荐选择epoll工作模式,这是高并发的设置。

events {use epoll;worker_connections  1024;
}

根据官方建议,也可以不指定事件处理模型,默认情况下,nginx会自己选择最合适最佳的事件处理模型服务。

单个进程运行的客户端最大连接数

events {worker_connections  1024;
}

worker_connections 参数就是设置单个进程的客户端最大连接数,默认值为1024,那么总的客户端最大连接数就等于work进程数*worker_connections。
worker_connections连接数包含了代理服务器的连接数、客户端的连接数。
ngixn总并发连接=worker_processe 乘以 worker_connections

开启高效文件传输模式

sendfile  on;                    #默认是off,表示开启高效文件传输模式,可以放置的位置:http、server、location、if in location
tcp_nopush on;                  #配置一次发送数据的包大小,即它不是按时间累计0.2 秒后发送包,而是当包累计到一定大小后就发送,在 nginx 中,tcp_nopush 必须和 sendfile 搭配使用。

配置Nginx worker进程最大打开文件数(性能优化)

官方参考链接:http://nginx.org/en/docs/ngx_core_module.html#worker_rlimit_nofile
Syntax:worker_rlimit_core size;
Default:—
Context:main
实践配置:worker_rlimit_nofile 65535;

#<==最大打开文件数,可设置为系统优化后的ulimit -HSn的结果,在第3章中,调整系统文件描述符和这个问题有相同之处。

Keepalive_timeout 超时时间

keepalive_timeout :超时时间,是指客户端到服务端的连接持续有效时间,若在这个时间内接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。若keepalive_timeout设置为 0,就禁止了 keepalive 连接。

调整上传文件的大小(http Request body size)限制

在 Nginx 的主配置文件里加入如下参数:

client_max_body_size 8m;

具体大小根据公司的业务做调整,如果不清楚就先设置为 8m 吧,有关客户端请求主体的解释在 HTTP 原理一节已经解释过了,一般情况下,HTTP 的 post 方法在提交数据时才会携带请求主体信息。

client_max_body_size 参数的官方说明如下:
syntax: client_max_body_size size;#<==参数语法
default: client_max_body_size 1m;#<==默认值是 1m
context: http, server, location

#<==可以放置的标签段
参数作用:设置最大的允许的客户端请求主体大小,在请求头域有“Content-Length”,如果超过了此配置值,客户端会收到 413 错误,意思是请求的条目过大,有可能浏览器不能正确显示。设置为0 表示禁止检查客户端请求主体大小。此参数对提高服务器端的安全性有一定的作用。

nginx企业级优化实战相关推荐

  1. Web服务器群集——Nginx企业级优化

    Nginx企业级优化 Nginx企业级优化 隐藏版本号 修改用户和组 配置网页缓存时间 日志切割 设置连接超时 更改进程数 配置网页压缩 配置防盗链 FPM参数优化 Nginx企业级优化 nginx. ...

  2. Web服务器Nginx企业级优化

    部署Nginx软件 1)安装支持软件: Nginx的配置及运行需要pcre.zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成 ...

  3. L028-老男孩实效教育-nfs网络文件系统企业级优化实战-12节

    通过命令:mount -t nfs -o nosuid,noexec,nodev,rw 10.0.0.7:data/ /mnt       将mnt挂载. 挂载的时候因为加了noexec参数,虽然有x ...

  4. 企业级NginxWeb服务优化实战(上)

    企业级NginxWeb服务优化实战(上) 1. Nginx基本安全优化 1.1 调整参数隐藏Nginx软件版本号信息 一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题 ...

  5. JavaScript系列—性能优化之《网站性能优化实战——从12.67s到1.06s的故事》

    本篇博文来源于网络 226 人赞同了该文章 原文作者:IMWeb jerryOnlyZRJ  原文链接:网站性能优化实战--从12.67s到1.06s的故事 - 腾讯Web前端 IMWeb 团队社区 ...

  6. 2 周流量激增百倍的腾讯课堂后台扩容和性能优化实战

    作者:andyawang,腾讯 CSIG 后台开发工程师 疫情期间,学校网课需求激增,腾讯课堂 2 天上线极速版,2 周内支持同时在线人数超百倍增长,对整个后台挑战非常大.整整 2 个月下来,同合作团 ...

  7. CentOS 7.2下ELK分析Nginx日志生产实战(高清多图)

    注:本文系原创投稿 本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名 ...

  8. Elastic Stack技术栈实践与Filebeat+Kibana企业级案例实战

    Elastic Stack技术栈实践与Filebeat+Kibana企业级案例实战 全新ELK企业级应用实战教程 Elastic Stack技术栈实践基于企业级Elasticsearch应用与Elas ...

  9. [Nginx] – 安全优化 – 配置文件优化 [二]

    [Nginx] – 安全优化 – 配置文件优化 [二] Nginx  修改时间:2016年12月26日 首先在此感谢下我的老师–老男孩专家拥有16年一线实战经验,为我们运维班28期所有成员的耐心讲解, ...

  10. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

最新文章

  1. c语言函数的可选性自变量
  2. CentOS+Nginx+Tomcat+Mysql+PHP 环境搭建及系统部署
  3. linux 编译openmp,Linux 系统中OpenMP
  4. flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码-阿里云开发者社区...
  5. 决策树——学习笔记(一)
  6. Nginx与安全有关的几个配置
  7. vs2010如何安装qt插件
  8. draggable禁止拖动_通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽...
  9. Angular企业级开发(3)-Angular MVC实现
  10. C语言:采用交互式方式打开指定的文件,若文件打开成功,则显示该文件的大小,并显示文件内容,若文件打开失败,则提示出错信息
  11. Excel实验情况对比排序
  12. 互联网科普-淘宝与天猫的对标
  13. 量子加密_量子强化加密协议
  14. 安装内存条后系统蓝屏怎么解决
  15. 小程序 怎样判断数据的类型
  16. SpringBoot整合jersey
  17. 设置SolidWorks三维设计值参数化的方法,可以导入Workbench进行优化分析
  18. 星星之火可以燎原鸿蒙,余承东:没有人能够熄灭满天星光 星星之火可以燎原...
  19. linux下查看服务器型号
  20. OpenCV Java入门五 结合摄像头识脸和拍照

热门文章

  1. java反射 泛型类型_【译】9. Java反射——泛型
  2. CSS3实现的几个小loading效果
  3. 【hihocoder 1554】最短的 Nore0061
  4. 使用Spring注解获取配置文件信息
  5. .net读取Lotus Domino文件数据库
  6. Leetcode 147 Insertion Sort List
  7. 从此使用linux系统,但是QQ是必不可少的!!该篇文章方法成功!!!已验证!!!!!...
  8. CDC相关知识点总结
  9. LoggingBean如何获取调用类和调用方法信息LoggingSelenium
  10. Spring Cloud Alibaba Nacos集群和持久化配置