文章目录

前言一、优化方向二、具体配置1.worker优化2.keepalive优化3.开启TCP连接复用4.启用sendfile参数5.开启Gzip压缩6.调整client_body_buffer_size和client_max_body_size参数7.限流,防止DDoS攻击8.proxy超时设置9.proxy_set_header10.fastcgi调优11.proxy_cache缓存12.expires缓存调优13.黑白名单配置14.日志切割15.https安全配置16.隐藏版本信息及其他17.其他

前言

只是说心血来潮,忽然想写一下nginx调优那些事情,补充一下线上的文档(至于线下,收藏的都是配置文件,拿来改改就能用,也用不着和别人介绍每一项是干嘛的)

实际上nginx优化通用的也就几项,网上的内容基本上也差不多,主要看文档新不新,老版本和新版本是否有差异。关于nginx的优化还是需要根据自己的业务的具体情况和所拥有的资源来进行相应配置的,由于工作人员不同,业务不同,所以基本上每个nginx配置都是独一无二的,即使有的看似相同,但也都存在微小的差异。就好像我们的很多项目虽然一开始都是部署的统一的nginx和相同的优化配置,但是后期都要根据具体业务再进行微调,所以说没有什么是最好的,只有最适合自己的。文中的优化策略,需要根据自己的需求添加。

ps: 标题是chatgpt给起的,本文的几点优化基本上都是chatgpt列出的,看到这你就知道这些优化有多通用了。但是文章肯定不全是它写的,让机器完全代替个人写作,就会没有参与感。我主要是列出一些它没提到的优化,并带入经验之谈,使文章适读。

一、优化方向

Nginx作为一个高性能、可靠、开源的Web服务器和反向代理服务器,尽管性能已经非常出色,但在处理大量并发连接和请求时,仍然会出现性能瓶颈。许多Web开发人员和系统管理员都面临着提高Nginx性能和加速网站访问的挑战。本文将从以下几点列出一些实用的Nginx调优技巧和最佳实践,帮助您更好地优化Nginx配置,提高Web性能,加速网站访问。

优化TCP参数。通过调整Nginx的TCP参数,可以有效地提高并发连接数和请求的处理速度,从而实现更快的响应速度和更好的用户体验。具体的参数包括TCP连接超时、TCP连接重试次数、TCP缓冲区大小等等。

使用gzip压缩。启用gzip压缩可以显著减少网络传输的数据量,加快网页的加载速度,提高用户体验。Nginx可以通过配置gzip模块来启用gzip压缩,并设置适当的压缩等级和文件类型。

使用SSL加速可以提高网站的安全性和可靠性,同时也可以加快网站的访问速度。Nginx可以通过配置SSL模块来启用SSL加速,并设置合适的加密协议和密钥长度。

使用缓存和负载均衡技术可以进一步提高Nginx的性能和可靠性。Nginx可以通过配置proxy_cache模块来启用缓存,并设置适当的缓存策略和过期时间。另外,通过配置upstream模块来启用负载均衡,可以平衡不同后端服务器的负载,提高系统的可靠性和性能

避免不必要的模块加载。Nginx自带了大量的模块,但并不是每个模块都需要启用。启用过多的模块会增加内存开销和性能损耗。因此,建议仅启用必要的模块,避免不必要的模块加载。

使用静态文件服务器。将静态文件(如图片、CSS、JS文件等)与动态文件(如PHP、ASP等)分开处理,可以大大提高静态文件的处理速度和可靠性。Nginx可以通过配置静态文件服务器来专门处理静态文件,从而提高网站的性能和可靠性。

监控Nginx的性能指标。监控Nginx的性能指标可以及时发现性能瓶颈和故障,从而及时采取相应的措施。常见的Nginx性能指标包括CPU利用率、内存使用情况、网络带宽、连接数、请求响应时间等等。

使用优化过的Nginx镜像。如果使用的是docker或k8s,经过优化的Nginx镜像可以大大提高Nginx的性能和可靠性。这些镜像通常已经预装了必要的模块和插件,并使用了最佳的配置参数和调优技巧,也可自己进行封装或优化。

使用统一的配置格式。配置文件的存放和格式的统一,可以避免因存放位置或配置混乱导致的配置问题。多使用include引入配置文件,通用的配置写入配置文件中再引入,可以减少配置文件中的代码量,更清晰

二、具体配置

1.worker优化

<1>

worker_processes auto;

这个参数指定了Nginx的worker进程数

在设置该参数时,需要考虑服务器的CPU核心数和内存容量。如果服务器的CPU核心数越多,可以将worker_processes设置为更高的值,以便更充分地利用服务器资源。同时,也需要确保每个worker进程占用的内存不会过高,否则可能会导致系统负载过高和性能下降。

一般建议将worker_processes设置为CPU核心数的1~4倍,自从1.9.10版本后可以配置auto,Nginx会根据服务器CPU核心数自动分配worker进程数

<2>

worker_cpu_affinity auto;

这个参数是将Nginx工作进程绑定到指定的CPU核心,并不是意味着当前nginx进程独占一个核心CPU,而是保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。关键是避免不同的CPU缓存失效。1.9.10版本后可以配置auto,Nginx会根据服务器CPU自动分配

ps -eo pid,args,psr | grep -v grep | grep nginx ,可查看nginx worker进程绑定对应的cpu,

<3>

events {

use epoll;

worker_connections 65535;

}

Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的I/O多路复用模型,在Solaris使用/dev/pool方式的I/O多路复用模型,在windows使用的icop。

要根据系统类型不同选择不同的事物处理模型,因此将nginx的事件处理模型调整为epoll

worker_connections参数指定了单个worker进程可以同时处理的最大并发连接数。需要根据实际情况来设置该参数,以确保Nginx能够处理足够多的连接请求,nginx的并发=worker_processes*worker_connections

如果系统没调优,这个参数默认1024,最大是65535

worker_connections与内存,二是系统进程最大可打开文件数有重要关联

内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx

进程最大可打开文件数:可通过 ulimit -n 命令查询

<4>

worker_rlimit_nofile 65535;

更改worker进程的最大打开文件数限制,会覆盖ulimit的值。如果没设置,这个值默认为操作系统的限制

如果nginx发生too many open files可修改这个值

2.keepalive优化

<1>

keepalive_timeout 65;

这个参数指定了客户端和Nginx服务器之间的TCP连接会话保持时间。如果客户端在该时间内没有发送请求,则连接将被关闭。设置较短的keepalive_timeout可以释放连接资源,但可能会增加连接的开销。相反,设置较长的keepalive_timeout可以减少连接的开销,但会占用更多的连接资源和带宽。建议将keepalive_timeout设置为较小的值,如60秒。如果使用了反向代理,可以将keepalive_timeout设置为更小的值,如10秒。

<2>keepalive_requests 100;

keepalive_requests指定每个keepalive连接的最大请求数。可以根据应用程序的负载和性能需求调整该参数。chatgpt推荐参数,实际上大多数人包括我们生产配置文件都没配置这个参数,默认1000

3.开启TCP连接复用

<1>

tcp_nodelay on;

tcp_nopush on;

TCP连接复用可以将多个HTTP请求复用同一个TCP连接,减少连接建立和断开的开销,提高性能。可以通过配置tcp_nodelay和tcp_nopush参数来开启TCP连接复用

tcp_nodelay参数禁用了Nagle算法,可以减少TCP延迟,提高响应速度。tcp_nopush参数开启TCP连接复用,可以将多个HTTP请求复用同一个TCP连接,减少连接建立和断开的开销

4.启用sendfile参数

<1>

sendfile on;

tcp_nopush on;

sendfile指令可以将静态文件的数据直接从磁盘发送到网络接口,避免了将数据从磁盘读入内存再发送的过程,大大提高文件传输的效率。tcp_nopush指令则可以在将多个小数据包合并为一个大数据包发送到客户端时,避免等待数据包满足一定条件后再发送,从而提高了性能。

5.开启Gzip压缩

<1>

gzip on;

gzip_min_length 1k; #设置允许压缩的页面最小字节数。

gzip_buffers 4 16k; #用来存储gzip的压缩结果

gzip_http_version 1.1; #识别HTTP协议版本

gzip_comp_level 2; #设置gzip的压缩比 1-9 1压缩比最小但最快 9相反

gzip_types text/plain application/x-javascript text/css application/xml application/json application/javascript text/xml text/javascript image/jpeg image/gif #指定了需要压缩的文件类型

#gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;image/png;

gzip_proxied any; #无论后端服务器的headers头返回什么信息,都无条件启用压缩

gzip_vary on;

gzip_disable "MSIE [1-6]."; #禁用IE6的gzip压缩

gzip_static on;

开启Gzip压缩可以减小传输数据量,加快数据传输速度可以有效减少网络带宽占用和页面加载时间。

需要注意的是,开启gzip会增加CPU负载和内存消耗,因此需要根据服务器的硬件配置和实际情况来进行调整。

6.调整client_body_buffer_size和client_max_body_size参数

<1>

client_body_buffer_size 10M;

client_max_body_size 100M;

client_body_buffer_size指定Nginx接收客户端请求体的缓冲区大小,可以根据应用程序的请求体大小调整该参数

client_max_body_size指定客户端请求体的最大大小,可以根据应用程序的需求调整该参数

7.限流,防止DDoS攻击

分为前端有cdn等服务的情况和无cdn的情况

<1>不过cdn的 常用配置

#$binary_remote_addr针对同一客户端ip地址限制

limit_conn_zone $binary_remote_addr zone=addr:10m;

limit_conn addr 5;

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

limit_req zone=one burst=5 nodelay;

chatgpt推荐用法

第一行:定义一个名为addr的限制连接区域,使用$binary_remote_addr来标识客户端IP地址,并且将此区域的内存限制为10MB。这将允许在这个区域中存储大约1百万个客户端IP地址和连接状态。

第二行:使用"limit_conn"指令来限制来自每个客户端的并发连接数。这里将限制每个客户端的并发连接数为5。也就是说,如果某个客户端尝试建立超过5个连接,则其后续连接将被拒绝,直到其中某些连接被关闭或释放。

第三行:定义一个名为one的限流区域,使用$binary_remote_addr来标识客户端IP地址,并且设置了速率限制为每秒1个请求。这将允许在这个区域中存储大约10万个客户端IP地址和请求状态。

第四行:使用"limit_req"指令来限制来自每个客户端的请求速率。这里将允许每个客户端以每秒不超过1个请求的速率进行请求,但在短时间内可以接受5个请求的突发。使用nodelay参数表示即使在请求超出阈值时也不延迟处理,而是立即拒绝。

在Nginx 中,使用 limit_conn_zone 来定义连接限制区域时,指定的内存大小会直接影响该区域可以存储的连接状态数和客户端 IP 地址数。通常,一个连接状态需要占用几十字节的内存,而一个 IPv4 地址需要占用 4 字节的内存空间,IPv6 地址需要占用 16 字节的内存空间。

因此,当使用 10m 内存限制时,可以存储的客户端 IP 地址和连接状态数大约为:

IPv4 地址:10 * 1024 * 1024 / 4 = 2,621,440 个

IPv6 地址:10 * 1024 * 1024 / 16 = 655,360 个

这里的计算结果只是一个估算值,实际存储数量可能会因为系统内存碎片、Nginx 自身的开销等因素而有所不同。

<2>过cdn的常用配置

#$http_x_forwarded_for针对原始用户的ip地址限制,$server_name限制同一server最大并发数

limit_conn_zone $http_x_forwarded_for zone=one:1000m;

limit_req_zone $http_x_forwarded_for zone=two:10m rate=500000r/s;

limit_conn_zone $server_name zone=perserver:10m;

生产用法1

第一行:定义一个名为one的限制连接区域,使用$http_x_forwarded_for来标识客户端IP地址,并且将此区域的内存限制为1000MB。这将允许在这个区域中存储大约1000万个客户端IP地址和连接状态。

第二行:定义一个名为two的限流区域,同样使用$http_x_forwarded_for来标识客户端IP地址,并且设置了速率限制为每秒500,000个请求。这将允许在这个区域中存储大约10万个客户端IP地址和请求状态。

第三行:定义一个名为perserver的限制连接区域,使用$server_name来标识连接状态,并且将此区域的内存限制为10MB。这将允许在这个区域中存储大约10万个连接状态,每个状态都与服务器名相关联。

<3>针对原始IP(真实IP)限制的另一种写法

#这里取得原始用户的IP地址

map $http_x_forwarded_for $clientRealIp {

"" $remote_addr;

~^(?P[0-9\.]+),?.*$ $firstAddr;

}

#针对原始用户IP地址做限制

limit_conn_zone $clientRealIp zone=TotalConnLimitZone:10m ;

limit_conn TotalConnLimitZone 50;

limit_conn_log_level notice;

生产用法2

备注:

DDoS攻击是一种常见的网络攻击,可以通过将大量的流量发送到目标服务器来使其崩溃或变得无法访问。为了保护服务器免受DDoS攻击,您可以配置Nginx来限制IP地址和连接速度等

$binary_remote_addr限制同一客户端ip地址

$server_name限制同一server最大并发数

$http_x_forwarded_for限制原始用户的ip地址

limit_conn限制并发连接数

limit_req 限制请求

limit_rate限制下载速度

rate参数的设置需要综合考虑多种因素,包括服务器的处理能力、网络带宽、应用程序的特性和负载等。

下面列出一些常见的实际配置案例:

1.低延迟应用程序的配置:

如果应用程序是低延迟的,例如在线游戏、实时视频等,那么需要设置较低的速率限制,以确保响应时间不受影响。例如,设置 rate=100r/s 可以限制每个客户端每秒最多只能发出 100 个请求。

2.高吞吐量应用程序的配置:

如果应用程序是高吞吐量的,例如大型文件传输、视频流媒体等,那么需要设置较高的速率限制,以充分利用服务器的处理能力和网络带宽。例如,设置 rate=10000r/s 可以限制每个客户端每秒最多只能发出 10000 个请求。

3.分布式应用程序的配置:

如果应用程序是分布式的,例如云计算、容器编排等,那么需要根据应用程序的规模和负载情况设置合适的速率限制。例如,设置 rate=500r/s 可以限制每个客户端每秒最多只能发出 500 个请求。

8.proxy超时设置

<1>

proxy_connect_timeout 1000;

proxy_read_timeout 1000;

proxy_send_timeout 1000;

proxy_buffer_size 64k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

proxy_connect_timeout 后端服务器连接的超时时间,发起握手等候响应超时时间

proxy_send_timeout 后端服务器数据回传时间,就是在规定时间内后端服务器必须传完所有的数据

proxy_read_timeout 连接成功后,等候后端服务器响应时间,其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间,页面等待服务器响应时间)

proxy_buffers 4是数量 32k是大小 该指令设置缓存区的大小和数量,从被代理的后端服务器取得的第一部分响应内容,会放置到这里,默认情况下,一个缓存区的大小等于内存页面大小,可能是4k也可能是8k取决于平台

proxy_busy_buffers_size nginx在收到服务器数据后,会分配一部分缓冲区来用于向客户端发送数据,这个缓存区大小由proxy_busy_buffers_size决定的。大小通常是proxy_buffers单位大小的两倍,官网默认是8k/16k

proxy_connect_timeout 参数与使用 Nginx 作为反向代理服务器时,Nginx 与后端服务器建立连接的超时时间有关,当Nginx尝试与后端服务器建立连接时,如果连接超时了,即在 proxy_connect_timeout 时间内没有建立成功,Nginx 将会认为连接失败,并返回连接失败的错误信息.

通常proxy_read_timeout,proxy_send_timeout要与其一致。一般可设置30s或60s,不加单位则是毫秒,通常设置1000,这个参数的值表示连接超时的时间。在配置 Nginx 时,需要根据后端服务器的响应速度和网络状况,设置合适的proxy_connect_timeout 值,以确保 Nginx 能够及时地与后端服务器建立连接,并在连接失败时能够及时返回错误信息。

例如,如果后端服务器响应速度较快,网络状况较好,可以将 proxy_connect_timeout 参数设置为较短的时间,例如 1000 毫秒。如果后端服务器响应速度较慢,网络状况较差,需要将 proxy_connect_timeout 参数设置为较长的时间,例如 5000 毫秒

9.proxy_set_header

<1>

#保留代理之前的host 包含客户端真实的域名和端口号

proxy_set_header Host $host;

#保留代理之前的真实客户端ip

proxy_set_header X-Real-IP $remote_addr;

#这个Header和X-Real-IP类似,但它在多级代理时会包含真实客户端及中间每个代理服务器的IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#表示客户端真实的协议(http还是https)

proxy_set_header X-Forwarded-Proto $scheme;

proxy_redirect off;

proxy_set_header重新定义或者添加**发往后端服务器的请求头**,一般跟着proxy_pass

一个http请求结构大致分为请求头,请求行,请求体的。而客户端的IP地址信息一般都是存储在请求头里的,proxy_set_header允许重新定义或者添加发往后端服务器的请求头(如果当前配置中没有定义proxy_set_header,会从上面的继承配置),目的是设置被代理端接收到的远程客户端IP。如果不设置,则header信息中并不会透传远程真实客户端的IP地址

10.fastcgi调优

<1>

fastcgi_read_timeout 300;

fastcgi_buffer_size 16k;

fastcgi_buffers 4 16k;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_cache的作用是缓存fastcgi生成的内容,基本是php生成的动态内容

fastcgi_read_timeout 指定接收FastCGI应答的超时时间

fastcgi_buffer_size 指定读取FastCGI应答第一部分需要用多大的缓冲区,默认的缓冲区大小为fastcgi_buffers指令中的每块大小,可以将这个值设置更小

fastcgi_buffers 指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到

fastcgi_connect_timeout 指定连接到后端FastCGI的超时时间

fastcgi_send_timeout 向FastCGI传送请求的超时时间

11.proxy_cache缓存

<1>

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;

proxy_cache_key "$scheme$request_method$host$request_uri";

proxy_cache_valid 200 60m;

proxy_cache_bypass $http_pragma;

proxy_cache_revalidate on;

Nginx可以作为反向代理服务器使用,并使用缓存来加速网站访问。通过缓存静态文件和动态内容,可以减少对后端服务器的请求次数,并提高网站的响应速度。proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;: 定义了反向代理缓存的存储路径和缓存区域的名称(my_cache)。levels=1:2 表示缓存目录的层次结构,例如:/var/cache/nginx/m/y。inactive=60m 表示缓存文件在 60 分钟内没有被访问时,将被删除。10m 表示缓存区域的大小为 10MB。

proxy_cache_key "$scheme$request_method$host$request_uri";: 指定了用于生成缓存键的变量。这里的缓存键由请求的协议、请求方法、主机名和请求 URI 组成。

proxy_cache_valid 200 60m;: 指定了哪些响应码和时间段内的响应可以被缓存。这里 200 表示只缓存 200 响应码的请求响应,60m 表示缓存时间为 60 分钟。

proxy_cache_bypass $http_pragma;: 如果请求头部包含 Pragma,则跳过缓存,直接请求后端服务器。Pragma 是 HTTP/1.0 中用于控制缓存的请求头,一般不被使用,但有些浏览器在发送 GET 请求时会包含该请求头。

proxy_cache_revalidate on;: 在缓存文件过期后,启用后端服务器的缓存验证功能。如果后端服务器返回新的响应,则更新缓存文件。如果返回 304 Not Modified,则继续使用原来的缓存文件

12.expires缓存调优

<1>

location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {

expires 30d;

access_log off;

}

location ~* \.(js|css)$ {

expires 1h;

access_log off;

}

这个主要是针对于图片,css,js 等更改机会比较少的文件,通常是做动静分离,专门用于配置静态服务器。

图片等占用带宽大的文件,可以设置缓存时间长一些,几十天或几个星期。

css,js,html等更新频率较高的文件,可以缓存时间短一些,几天或几个小时。

13.黑白名单配置

<1>白名单配置

location / {

allow 192.168.136.1;

deny all;

}

<2>黑名单设置

location / {

deny 192.168.136.1;

allow all;

}

根据需求对对应ip进行限制或放行

14.日志切割

<1>nginx日志默认没有分割,会不断累积,后期会不方便收集和查看

使用logrotate日志轮转

cat /etc/logrotate.d/nginx

/Apk/log/nginx/access.log

/Apk/log/nginx/error.log

/Apk/log/nginx/health-access.log

/Apk/log/nginx/pudong-static-access.log

/Apk/log/nginx/xicheng-static-access.log

{

daily

rotate 1095

missingok

dateext

dateformat -%Y-%m-%d

notifempty

sharedscripts

postrotate

[ -e /usr/local/openresty/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid`

endscript

}

#yearly //或者一年一轮转

#monthly //每月轮转一次

#daily //每天轮转一次

#dateext //使用日期作为后缀

#dateformat -%Y-%m-%d //文件后缀

#missingok //丢失不执行

#notifempty //空文件不轮转

#maxsize 30k //达到30k轮转, daily or size

#rotate 3 //轮转保留3天备份文件

#create 0600 root root

#create 0777 root root //创建新文件

#sharedscripts //共享脚本

#postrotate //脚本开始,提交轮转

15.https安全配置

<1>

server {

listen 443 ssl http2;

server_name xxx.com;

ssl on;

ssl_certificate /路径/证书名称.pem;

ssl_certificate_key /路径/证书名称.key;

ssl_session_timeout 5m;

# SSL协议配置

ssl_protocols SSLv2 SSLv3 TLSv1.2 TLSv1.3; #表示使用TLS类型协议

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;#表示使用加密套件的类型

ssl_prefer_server_ciphers on;

root /xxx/xxx/html;

index index.html;

启用HTTP/2协议

HTTP/2是HTTP协议的新版本,它使用二进制协议代替了文本协议,可以更有效地传输数据,并支持服务器推送和多路复用等功能。启用HTTP/2可以提高网站的响应速度和性能

使用HTTPS加密您的网站流量。HTTPS加密可以保护您的网站免受攻击和信息窃取。

16.隐藏版本信息及其他

<1>

server_names_hash_bucket_size 128;

client_header_buffer_size 512k;

large_client_header_buffers 4 512k;

server_tokens off;

server_names_hash_bucket_size 128; 这个参数设置了服务器名的哈希表桶的大小。它影响了 Nginx 能够处理多少个不同的服务器名。在处理多个虚拟主机时,这个参数的大小会影响到性能。

client_header_buffer_size 512k; 这个参数设置了客户端请求头部的缓冲区大小。如果请求头部超过了这个大小,则会返回 413 (Request Entity Too Large) 错误。通常可以根据应用程序的需要来调整这个参数的大小。

large_client_header_buffers 4 512k; 这个参数设置了客户端请求头部的缓冲区大小和数量。如果客户端请求头部比较大,可以使用多个缓冲区来存储。这个参数包含两个值,第一个值表示缓冲区的数量,第二个值表示缓冲区的大小。这里的设置表示使用 4 个缓冲区,每个缓冲区的大小为 512k。

server_tokens off; 这个参数禁止了 Nginx 在响应头部中发送版本信息。这可以提高服务器的安全性,因为攻击者无法通过版本信息了解 Nginx 的漏洞信息。

17.其他

<1>为每个虚拟主机使用单独的日志文件,并分割。这可以帮助您更好地跟踪和管理服务器的日志。

<2>将常用的和统一的某些配置写成conf文件,用include引用。仅需修改配置文件的扩展名,即可引用不同配置,可以简化主配置文件,便于阅读。

<3>避免使用过多的Nginx模块。尽管Nginx支持各种模块,但使用过多的模块可能会导致性能下降。只使用您需要的模块,并且确保它们都已正确配置。

<4>需要时刻关注最新版本的Nginx和相关的软件包更新。新版本的Nginx通常会包括新功能和修复漏洞,而新版本的相关软件包也可能会导致性能或兼容性问题。

<5>定期备份Nginx配置和网站数据以保护服务器免受数据损失。

<6>要想完全发挥web的性能,系统的部分参数也需要进行调优,剩下的部分写到系统调优文档

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。