nginx为什么能够替代httpd发展起来

本文探讨了Nginx如何凭借其高性能、开源及支持高并发连接的优势逐渐取代Httpd,特别是在c10k问题上表现突出。Nginx采用事件驱动、异步和非阻塞I/O模型,有效解决了传统Httpd模型在处理大量并发连接时存在的效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx为什么能够替代httpd发展起来

nginx为什么能够在httpd如日中天的时候发展起来,并且不断蚕食其市场份额?

它免费,开源,并且高性能代练httpd的请求,最重要的是因为c10k

什么是c10k

现在互联网发展迅速,高访问量和高并发量成为新常态,传统的httpd并不能够解决这样的问题,c10k页就是concurrent 10 000 connection 由于硬件成本降低,如果一台服务器能够服务更多客户端那就更加合算了,httpd显然自己在这个方面没有这样的优势

为什么说httpd没有这样的优势

httpd有三种MPM

prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求

worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求

event:主进程master负责生成子进程,每个子进程响应多个请求

httpd在处理请求的时候是这样的:比如perfork模型,每个子进程响应一个请求,为什么只能响应一个请求呢?那是因为一个进程在io是阻塞的,它在等待数据到来才能回复,如果一直不回复就只能等待,在等待期间不能去接受其他的请求,这个时候就被阻塞了,而且perfork每个子进程接受的请求有限,不光这样,系统调用,进程创建,进程销毁都要消耗时间,

httpd不管用那个模型都不能避免在io的过程中浪费时间和资源,不能很好的利用

上面的io模型是什么

阻塞型、非阻塞型、复用型、信号驱动型、异步

一次IO请求,都会由两阶段组成

  1. 第一步:等待数据,即数据从磁盘到内核内存
  2. 第二步:复制数据,即数据内核内存到进程内存

阻塞/非阻塞(关注调用者在等待结果返回之前所处的状态)

  • 阻塞:blocking,调用结果返回之前,调用者被挂起
  • 非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起

同步/异步(关注消息通知机制)

  • 同步:等待对方返回消息
  • 异步:被调用者通过状态、通知或回调机制通知调用者被调用者的运行状态

复用型IO调用

​ 可以在阻塞之前能够接入更多的请求,能够同时监控这些请求数据是否准备好,主要用的是select(),这个函数调用可以同时监控多达1024个请求,poll()函数调用也可以完成

event-driven

epoll(Linux):libevent

Kqueue(BSD)

Solaris:/dev/poll

具体的可以看我另外一个博客

nginx有什么优势

他实现了一个子进程可以同时接入多个请求,而且优化了io模型等等,

总之三个优势

  • event-driven
  • asynchronous
  • non-blocking
要在OpenWRT中使用Nginx替代默认的HTTP服务,你需要按照以下步骤进行操作: 1. **安装Nginx**: 首先,你需要在你的OpenWRT设备上安装Nginx。这通常可以通过OpenWRT的包管理器opkg来完成。登录到你的设备的命令行界面,执行以下命令安装Nginx: ``` opkg update opkg install nginx ``` 2. **配置Nginx**: 安装完成后,你需要配置Nginx以满足你的需求。Nginx的配置文件通常位于`/etc/nginx/`目录。你需要编辑`nginx.conf`文件以及可能的站点配置文件(通常位于`/etc/nginx/conf.d/`或`/etc/nginx/sites-enabled/`目录)。 3. **停止和禁用默认的HTTP服务**: 为了让Nginx成为系统的默认HTTP服务,你需要停止并禁用OpenWRT自带的HTTP服务(通常是httpd或lighttpd)。你可以使用以下命令来停止和禁用服务: ``` /etc/init.d/httpd stop opkg remove luci-app-httpd opkg remove lighttpd ``` 4. **启动和管理Nginx服务**: 完成配置后,你可以使用以下命令启动Nginx服务: ``` /etc/init.d/nginx start ``` 若要确保Nginx在系统启动时自动运行,可以使用: ``` /etc/init.d/nginx enable ``` 5. **测试和调试**: 确保Nginx配置正确无误后,你可以通过浏览器或其他HTTP客户端工具访问你的OpenWRT设备的IP地址来测试Nginx是否正常工作。 6. **优化和安全配置**: 在部署后,你可能还需要考虑对Nginx进行安全配置和性能优化,以适应生产环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值