【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

优化nginx性能:通过测试配置文件释放隐藏的潜力 (优化nginx)

用户投稿2024-04-19热门资讯12

Nginx 是一种流行且强大的 Web 服务器,因其高性能、稳定性和可扩展性而闻名。为了充分利用其潜力,优化其配置文件至关重要。通过对配置文件进行测试,您可以识别和调整瓶颈,从而显著提高 Nginx 的性能。

测试 Nginx 配置文件

测试 Nginx 配置文件的第一步是使用 nginx -t 命令。此命令将检查配置文件是否有语法错误或配置问题。如果您看到任何错误或警告,请相应地更正配置文件。


nginx -t

除了语法检查之外,您还可以使用以下工具对配置文件进行性能测试:

  • ab (Apache Benchmark): ab 是一款命令行工具,可用于模拟并发用户并测试 Web 服务器的性能。
  • wrk: wrk 是一款现代替代品,它提供了更先进的功能,例如支持 HTTP/2。
  • Siege: Siege 是另一个命令行工具,可用于对 Web 服务器进行负载测试。

优化 Nginx 配置文件

一旦您识别了配置文件中的任何瓶颈,就可以使用以下最佳实践>sendfile 允许 Nginx 将文件直接从磁盘发送到客户端,而无需将其加载到内存中。这可以提高处理静态文件请求的性能。使用 sendfile on; 指令启用 sendfile。

sendfile on;

结论

通过测试和优化 Nginx 配置文件,您可以释放其隐藏的潜力,从而提高网站或应用程序的性能。遵循这些最佳实践并根据您的具体需求调整设置,您可以显著改善 Nginx 的整体效率和响应时间。


高并发nginx,需要注意哪些配置

参考下面的nginx 配置高并发一、一般来说nginx 配置文件中对优化比较有作用的为以下几项_processes 8;nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。 _cpu_affinity ;为每个进程分配cpu,上例中将8 个进程分配到8 个cpu,当然可以写多个,或者将一个进程分配到多个cpu。 _rlimit_nofile ;这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。 现在在linux 2.6内核下开启文件打开数为,worker_rlimit_nofile就相应应该填写。 这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写,总并发量达到3-4万时就有进程可能超过了,这时会返回502错误。 查看linux系统文件描述符的方法:[root@web001 ~]# sysctl -a | grep -max = -nr = 510 0 epoll;使用epoll 的I/O 模型(补充说明:与apache相类,nginx针对不同的操作系统,有不同的事件模型A)标准事件模型 Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或pollB)高效事件模型 Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。 Epoll:使用于Linux内核2.6版本及以后的系统。 /dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。 Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁。 )_connections ;每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections。 _timeout 60;keepalive 超时时间。 _header_buffer_size 4k;客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。 分页大小可以用命令getconf PAGESIZE取得。 [root@web001 ~]# getconf PAGESIZE 4096但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。 _file_cache max= inactive=60s;这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。 _file_cache_valid 80s;这个是指多长时间检查一次缓存的有效信息。 _file_cache_min_uses 1;open_file_cache 指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。 二、关于内核参数的优化_max_tw_buckets = 6000timewait 的数量,默认是。 _local_port_range = 1024 允许系统打开的端口范围。 _tw_recycle = 1启用timewait 快速回收。 _tw_reuse = 1开启重用。 允许将TIME-WAIT sockets 重新用于新的TCP 连接。 _syncookies = 1开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。 = web 应用中listen 函数的backlog 默认会给内核参数的 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。 _max_backlog = 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。 _max_orphans = 系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上。 如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。 这个限制仅仅是为了防止简单的DoS 攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。 _max_syn_backlog = 记录的那些尚未收到客户端确认信息的连接请求的最大值。 对于有128M 内存的系统而言,缺省值是1024,小内存的系统则是128。 _timestamps = 0时间戳可以避免序列号的卷绕。 一个1Gbps 的链路肯定会遇到以前用过的序列号。 时间戳能够让内核接受这种“异常”的数据包。 这里需要将其关掉。 _synack_retries = 1为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。 也就是所谓三次握手中的第二次握手。 这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。 _syn_retries = 1在内核放弃建立连接之前发送SYN 包的数量。 _fin_timeout = 1如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。 对端可以出错并永远不关闭连接,甚至意外当机。 缺省值是60 秒。 2.2 内核的通常值是180 秒,3.可以按这个设置,但要记住的是,即使机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些。 _keepalive_time = 30当keepalive 起用的时候,TCP 发送keepalive 消息的频度。 缺省是2 小时。 三、下面贴一个完整的内核优化设置:vi /etc/5.5中可以将所有内容清空直接替换为如下内容_forward = _filter = _source_route = = _uses_pid = _syncookies = = = = = _max_tw_buckets = _sack = _window_scaling = _rmem = 4096 _wmem = 4096 _default = _default = _max = _max = _max_backlog = = _max_orphans = _max_syn_backlog = _timestamps = _synack_retries = _syn_retries = _tw_recycle = _tw_reuse = _mem = _fin_timeout = _keepalive_time = _local_port_range = 1024 使配置立即生效可使用如下命令:/sbin/sysctl -p四、下面是关于系统连接数的优化linux 默认值 open files 和 max user processes 为 1024#ulimit -n1024#ulimit –u1024问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。 新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。 因此,需要将其改大。 解决方法:使用 ulimit –n 可即时修改,但重启后就无效了。 (注ulimit -SHn 等效 ulimit -n ,-S 指soft ,-H 指hard)有如下三种修改方式:1. 在/etc/ 中增加一行 ulimit -SHn . 在/etc/profile 中增加一行 ulimit -SHn . 在/etc/security/最后增加:* soft nofile * hard nofile * soft nproc * hard nproc 具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果 # ulimit -n# ulimit -u 备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。 但是不能增加。 soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。 五、下面是一个简单的nginx 配置文件:user www www;worker_processes 8;worker_cpu_affinity ;error_log /www/log/nginx_ crit;pid /usr/local/nginx/;worker_rlimit_nofile ;events{use epoll;worker_connections ;}http{include ;default_type application/octet-stream;charset utf-8;server_names_hash_bucket_size 128;client_header_buffer_size 2k;large_client_header_buffers 4 4k;client_max_body_size 8m;sendfile on;tcp_nopush on;keepalive_timeout 60;fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2keys_zone=TEST:10minactive=5m;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 4k;fastcgi_buffers 8 4k;fastcgi_busy_buffers_size 8k;fastcgi_temp_file_write_size 8k;fastcgi_cache TEST;fastcgi_cache_valid 200 302 1h;fastcgi_cache_valid 301 1d;fastcgi_cache_valid any 1m;fastcgi_cache_min_uses 1;fastcgi_cache_use_stale error timeout invalid_header http_500;open_file_cache max= inactive=20s;open_file_cache_min_uses 1;open_file_cache_valid 30s;tcp_nodelay on;gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml;gzip_vary on;server{listen 8080;server_name ;index ;root /www/html/;location /status{stub_status on;}location ~ .*\.(php|php5)?${fastcgi_pass 127.0.0.1:9000;fastcgi_index ;include ;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)${expires 30d;}log_format access $remote_addr -- $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /www/log/ access;}}

安全开发运维必备的Nginx代理Web服务器性能优化与安全加固配置

为了更好的指导部署与测试艺术升系统nginx网站服务器高性能同时下安全稳定运行,需要对nginx服务进行调优与加固;

本次进行Nginx服务调优加固主要从以下几个部分:

本文档仅供内部使用,禁止外传,帮助研发人员,运维人员对系统长期稳定的运行提供技术文档参考。

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx作为负载均衡服务器, Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。

Nginx版本选择:

项目结构:

Nginx文档帮助:首页地址目录: /usr/share/nginx/htmlNginx配置文件:

localtion 请求匹配的url实是一个正则表达式:

Nginx 匹配判断表达式:

例如,匹配末尾为如下后缀的静态并判断是否存在该文件, 如不存在则404。

查看可用模块编译参数:

http_gzip模块 开启gzip压缩输出(常常是大于1kb的静态文件),减少网络传输;

http_fastcgi_module模块 nginx可以用来请求路由到FastCGI服务器运行应用程序由各种框架和PHP编程语言等。可以开启FastCGI的缓存功能以及将静态资源进行剥离,从而提高性能。

keepalive模块 长连接对性能有很大的影响,通过减少CPU和网络开销需要开启或关闭连接;

http_ssl_module模块 Nginx开启支持Https协议的SSL模块

Linux内核参数部分默认值不适合高并发,Linux内核调优,主要涉及到网络和文件系统、内存等的优化,

下面是我常用的内核调优配置:

文件描述符 文件描述符是操作系统资源,用于表示连接、打开的文件,以及其他信息。NGINX 每个连接可以使用两个文件描述符。例如如果NGINX充当代理时,通常一个文件描述符表示客户端连接,另一个连接到代理服务器,如果开启了HTTP 保持连接,这个比例会更低(译注:为什么更低呢)。

对于有大量连接服务的系统,下面的设置可能需要调整一下:

精简模块:Nginx由于不断添加新的功能,附带的模块也越来越多,建议一般常用的服务器软件使用源码编译安装管理;

(1) 减小Nginx编译后的文件大小

(2) 指定GCC编译参数修改GCC编译参数提高编译优化级别稳妥起见采用 -O2 这也是大多数软件编译推荐的优化级别。

GCC编译参数优化 [可选项] 总共提供了5级编译优化级别:

常用编译参数:

缓存和压缩与限制可以提高性能 NGINX的一些额外功能可用于提高Web应用的性能,调优的时候web应用不需要关掉但值得一提,因为它们的影响可能很重要。

简单示例:

1) 永久重定向

例如,配置 http 向 https 跳转 (永久)

nginx配置文件指令优化一览表

描述:Nginx因为安全配置不合适导致的安全问题,Nginx的默认配置中存在一些安全问题,例如版本号信息泄露、未配置使用SSL协议等。对Nginx进行安全配置可以有效的防范一些常见安全问题,按照基线标准做好安全配置能够减少安全事件的发生,保证采用Nginx服务器系统应用安全运行;

Nginx安全配置项:

温馨提示: 在修改相应的源代码文件后需重新编译。

设置成功后验证:

应配置非root低权限用户来运行nginx服务,设置如下建立Nginx用户组和用户,采用user指令指运行用户

加固方法:

我们应该为提供的站点配置Secure Sockets Layer Protocol (SSL协议),配置其是为了数据传输的安全,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

不应使用不安全SSLv2、SSLv3协议即以下和存在脆弱性的加密套件(ciphers), 我们应该使用较新的TLS协议也应该优于旧的,并使用安全的加密套件。

HTTP Referrer Spam是废品信息发送者用来提高他们正在尝试推广的网站的互联网搜索引擎排名一种技术,如果他们的废品信息链接显示在访问日志中,并且这些日志被搜索引擎扫描,则会对网站排名产生不利影响加固方法:

当恶意攻击者采用扫描器进行扫描时候利用use-agent判断是否是常用的工具扫描以及特定的版本,是则返回错误或者重定向;

Nginx支持webdav,虽然默认情况下不会编译。如果使用webdav,则应该在Nginx策略中禁用此规则。加固方法: dav_methods 应设置为off

当访问一个特制的URL时,如../,stub_status模块提供一个简短的Nginx服务器状态摘要,大多数情况下不应启用此模块。加固方法文件中stub_status不应设置为:on

如果在浏览器中出现Nginx自动生成的错误消息,默认情况下会包含Nginx的版本号,这些信息可以被攻击者用来帮助他们发现服务器的潜在漏洞加固方法: 关闭Server响应头中输出的Nginx版本号将server_tokens应设置为:off

client_body_timeout设置请求体(request body)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。加固方法文件中client_body_timeout应设置为:10

client_header_timeout设置等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1)。仅当在一次read中没有收到请求头,才会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。

加固方法文件中client_header_timeout应设置为:10

keepalive_timeout设置与client的keep-alive连接超时时间。服务器将会在这个时间后关闭连接。

加固方法文件中keepalive_timeout应设置为:55

send_timeout设置客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。

加固方法文件中send_timeout应设置为:10

GET和POST是Internet上最常用的方法。Web服务器方法在RFC 2616中定义禁用不需要实现的可用方法。

加固方法:

limit_zone 配置项限制来自客户端的同时连接数。通过此模块可以从一个地址限制分配会话的同时连接数量或特殊情况。

加固方法文件中limit_zone应设置为:slimits $binary_remote_addr 5m

该配置项控制一个会话同时连接的最大数量,即限制来自单个IP地址的连接数量。

加固方法 文件中 limit_conn 应设置为: slimits 5

加固方法:

加固方法:

解决办法:

描述后端获取Proxy后的真实Client的IP获取需要安装--with-http_realip_module,然后后端程序采用JAVA((X-Real-IP))进行获取;

描述: 如果要使用geoip地区选择,我们需要再nginx编译时加入 --with-http_geoip_module 编译参数。

描述: 为了防止外部站点引用我们的静态资源,我们需要设置那些域名可以访问我们的静态资源。

描述: 下面收集了Web服务中常规的安全响应头, 它可以保证不受到某些攻击,建议在指定的 server{} 代码块进行配置。

描述: 为了防止某些未备案的域名或者恶意镜像站域名绑定到我们服务器上, 导致服务器被警告关停,将会对业务或者SEO排名以及企业形象造成影响,我们可以通过如下方式进行防范。

执行结果:

描述: 有时你的网站可能只需要被某一IP或者IP段的地址请求访问,那么非白名单中的地址访问将被阻止访问, 我们可以如下配置;

常用nginx配置文件解释:

(1) 阿里巴巴提供的Concat或者Google的PageSpeed模块实现这个合并文件的功能。

(2) PHP-FPM的优化如果您高负载网站使用PHP-FPM管理FastCGI对于PHP-FPM的优化非常重要

(3) 配置Resin on Linux或者Windows为我们可以打开 resin-3.1.9/bin/ 在不影响其他代码的地方加入=TLSv1.2, 例如

原文地址:

Nginx配置文件详解以及Nginx的启停控制,这里是精华

优化nginx性能:通过测试配置文件释放隐藏的潜力 (优化nginx) 第1张

安装完成Nginx服务器之后我们需要来学习如何启动,停止,重启Nginx服务。在Linux平台下有着不止一种的控制Nginx启停的方法 下面我们来详细的学习一下。 Nginx的信号控制 在控制nginx中有一类是通过信号控制的,因此我们来先介绍一下Nginx服务器的信号控制. 在nginx服务运行时,会保持一个主进程和多个worker process 工作进程,我们可以通过给主进程发送信号,就可以控制服务的启停了,那么我们如何去给服务发送信号?发送信号我们必须要知道服务的PID, 那么我们就来获取一下他的进程ID 第一种直接利用ps 查看详情 :

第二种 我们直接查看文件存储地址查看: 此操作需要先开启pid的存储才可以生效

找到我们的pid之后那么可以开始我们下一步的操作 再开始之前先了解一下可以接受的信号有哪些,各自有什么含义

向Nginx服务进程发送信号也有两种方式:

同样我我们可以使用动态的PID kill 信号 filepath (filepath指的是我们的的路径)

nginx服务的启动 在linux平台下,启动Nginx服务器直接运行安装目录下的Sbin目录中的二进制文件即可. 具体命令在sbin目录下:

这里主要讲下二进制文件的用法这是我们工作中常常用到的一些指令

nginx服务停止 停止我们的Nginx有两种方式

**Nginx服务的重启 ** 当我们Nginx服务加入新的模块后,如果希望当前的Nginx服务应用新的配置或者使用新的模块生效,就需要重启Nginx服务。当然我们可以先关闭Nginx服务然后使用新的Nginx配置文件重启Nginx服务, 这里我们讲的是平滑的重启Nginx服务 平滑是重启的一个过程,Nginx服务进程收到信号后先读取我们新的配置文件,如果我们新的配置文件正常,那么启动新的Nginx服务,然后平滑的关闭旧的进程服务,如果新的Nginx服务配置文件有问题那么将显示错误然后任然使用旧的Nginx 使用以下命令可以做到Nginx的平滑重启

Nginx服务的升级 如果我们需要对当前的Nginx服务进行升级 ,应用新的模块,最简单的方式是停下来,然后开启新的Nginx服务,那么给我们的用户体验是非常差的,会导致用户在一段时间内无法访问我们的服务器为了解决这个问题,Nginx提供了平滑升级的方案 过程如下: 注意: 为了实现nginx服务器的平滑升级,新安装的服务器路径应该和旧的一致。因此建议用新安装的服务器之前先备份一下我们的旧nginx服务器,如果由于种种原因不能保持新旧客户端路径一致则可以做一下操作,将旧的服务器路径更改为新的路径,新的服务器放入旧的路径中

执行过程 Nginx服务接受到USR2的信号后,首先将旧的Nginx。pid文件后面添加一个 变成了, 然后执行新版本的Nginx服务器的二进制文件启动服务,如果启动成功那么我们将会有两个Nginx服务在提供服务 之后需要向旧的发送WINCH信号,使旧的nginx服务平缓的停止并删除 文件 在发送WINCH信号前我们可以随时停止新的服务

从目录中我们不难看出所有的配置文件都放在conf目录下主要的配置文件为 那么下面我们带领你来去详细的解读一下其中的配置详情

注:近期持续更新有关nginx的知识点,欢迎大家关注!

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

优化nginx性能:通过测试配置文件释放隐藏的潜力 (优化nginx) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!