在当前互联网时代,服务器软件是重要的技术支撑之一。在这个领域,有很多知名的服务器软件,如Apache、Lighttpd等,他们都有着不错的声誉和广泛的应用。但是,在业界,nginx服务器(以下简称“nginx”)被誉为“无与伦比的顶级服务器”。它在性能、功能、可靠性方面,都有着过人的表现。
nginx的发展历程
nginx的诞生可以追溯到2023年,当时,它的创始人Igor Sysoev在工作中遇到了Apache等服务器软件的一些缺点,又发现有些功能实现不了,于是他决定自己写一款服务器。经过多次迭代和完善,nginx的之一个版本在2023年问世。它采用基于事件的异步模型,使得在高并发环境下,能够持续处理海量并发请求,同时还能保证高可靠性和扩展性。nginx凭借着其出色的性能和可靠性,在很短时间内赢得了业界的广泛认可。
nginx的性能
在性能方面,nginx表现非常优秀。它的并发连接数、处理请求速度、CPU和内存消耗等多项指标都优于其他服务器软件。在静态资源的处理上,nginx具有极高的效率,它的IO复用和缓存技术可以将响应速度优化到极致。另外,在请求转发和负载均衡方面,nginx也表现出色,它可以根据请求的类型和内容,自动进行智能判断和转发,帮助提高网站性能和用户访问体验。
nginx的功能
在功能方面,nginx也开发了很多强大的模块和插件,可以满足不同环境和场景的需求。例如,它可以作为反向代理服务器,帮助访问者请求既能够反向解析到内部服务器的端口,又能够自动转发请求。此外,nginx还支持HTTP/2协议、SSL加密传输、动态模块等一系列高级功能,从而满足用户在不同场景下的安全、流量控制、页面优化等需求。
nginx的可靠性
在可靠性方面,nginx一直是业界标杆。它为用户提供了超过10年的连续运行时间,即便是在高流量的情况下,也能够保持稳定和可用。此外,nginx还具有很好的丰富性和扩展性,用户可以通过编写自定义模块和配置文件,灵活地定制和扩展功能。
让我们来看看nginx成为顶级服务器的三个原因:
1.高效
由于nginx采用基于事件的异步模式, 并发连接数和处理请求速度都非常快。IO多路复用技术和缓存机制还可以大幅度提高响应速度,减少资源占用。此外, nginx的开发人员专门设计了请求流水线解决方案,使得服务器的资源利用率能够在保证处理速度的前提下更高。
2.灵活
nginx支持许多自定义功能,因此灵活性强。nginx能够在具有高并发连接性质的网络下使用(既适用于 Web 服务器,也适用于代理服务器)。从安装、配置、编译都非常方便,还可以自定义实现许多特定的业务场景。
3.可靠性高
nginx的稳定性是开发者在开发这个服务器时考虑到的核心问题之一——nginx执行环境占用资源少且流畅运行,因此即使实际用户量快速增加时,服务器的稳定性也不会受到太大的影响。nginx还有足够的扩展性和控制,可以针对特定需求编写自定义模块和配置文件,从而灵活地定制和扩展服务器功能。
结语
nginx作为一款顶级服务器,具有丰富的功能、优秀的性能和高可靠性,被广泛应用于互联网、金融、电商、游戏、媒体等不同的行业和领域。相信随着技术发展的进步和市场需求的变化,nginx能够以卓越的表现一路领跑,成为互联网领域的佼佼者。
相关问题拓展阅读:
- 安全开发运维必备的Nginx代理Web服务器性能优化与安全加固配置
- 为什么PHP程序员要了解Nginx服务器
安全开发运维必备的Nginx代理Web服务器性能优化与安全加固配置
为了更好的指导部署与测试艺术升系统nginx网站服务器高性能同时下安全稳定运行,需要对nginx服务进行调优与加固;
本次进行Nginx服务调优加固主要从以下几个部分:
本文档仅供内部使用,禁止外传,帮助研发人员,运维人员对系统长期稳定的运行提供技术文档参考。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/TP服务器。Nginx作为负载均衡服务器, Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也贺弊饥可以支持作为 HTTP代理服务器对外进行服务。
Nginx版本选择:
项目结构:
Nginx文档帮助:
Nginx首页地址目录: /usr/share/nginx/html
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时,如”../nginx.status”,stub_status模块提供一个简短的Nginx服务器状态摘要,大多数情况下不应启用此模块。
加固方法:nginx.conf文件中stub_status不应设置为:on
如果在浏览器中出现Nginx自动生成的错误消息,默认情况下会包含Nginx的版本号,这些信息可以被攻击者用来帮助他们发现服务器的潜在漏洞
加固方法: 关闭”Server”响应头中输出的Nginx版本号将server_tokens应设置为:off
client_body_timeout设置请求体(request body)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。
加固方法:nginx.conf文件中client_body_timeout应设置为:10
client_header_timeout设置等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1)。仅当在一次read中没有收到请求头,才会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。
加固方法:nginx.conf文件中client_header_timeout应设置为:10
keepalive_timeout设置与client的keep-alive连接超时时间。服务器将会在这个时间后关闭连接。
加固方法:nginx.conf文件中keepalive_timeout应设置为:55
send_timeout设置客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。
加固方法:nginx.conf文件中send_timeout应设置为:10
GET和POST是Internet上最常用的方法。Web服务器方法在RFC 2616中定义禁用不需要实现的可用方法。
加固方法:
limit_zone 配置项限制来自客户端的同时连接数。通过此模块可以从一个地址限制分配会话的同时连接数量或特殊情况。
加固方法:nginx.conf文件中limit_zone应设置为:slimits $binary_remote_addr 5m
该配置项控制一个会话同时连接的更大数量,即限制来自单个IP地址的连接数量。
加固方法:nginx.conf 文件中 limit_conn 应设置为: slimits 5
加固方法:
加固方法:
解决办法:
描述后端获取Proxy后的真实Client的IP获取需要安装–with-http_realip_module,然后后端程序采用JAVA(request.getAttribute(“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/httpd.sh 在不影响其他代码的地方加入:-Dhttps.protocols=TLSv1.2, 例如
为什么PHP程序员要了解Nginx服务器
因为 PHP 项目架构中 nginx 服务器是经常用到的中间件
轻量级,同样起web 服务,比apache 占用更少的内存及资源;
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗哪空高性;
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚亮竖拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支敬缓大持高达 50,000 个并发连接数的响应。
Nginx 静态处理性能比 Apache 高 3倍以上
高度模块化的设计,编写模块相对简单;
社区活跃,各种高性能模块出品迅速。
nginx是更好的服务器的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于nginx是更好的服务器,nginx:无与伦比的顶级服务器,安全开发运维必备的Nginx代理Web服务器性能优化与安全加固配置,为什么PHP程序员要了解Nginx服务器的信息别忘了在本站进行查找喔。