您现在的位置是:知识 >>正文
nginx web 服务器
知识54946人已围观
简介nginx 这名字念起来像 engine-x,2004 年由一个俄罗斯人 Igor Sysoev 写出来,最初是为了解决 C10K 问题——也就是同时一万个连接。那时候 Apache 是绝对老大,但它 ...
nginx 这名字念起来像 engine-x,服务2004 年由一个俄罗斯人 Igor Sysoev 写出来,服务最初是服务为了解决 C10K 问题——也就是同时一万个连接。那时候 Apache 是服务绝对老大,但它每个连接都要吃掉不少内存,服务一万个并发就能让服务器气喘吁吁。服务nginx 不一样,服务它用事件驱动、服务异步非阻塞的服务方式处理请求,一个进程能扛住十万甚至百万连接。服务这不是服务夸张,是服务真实的生产数据。
我见过最典型的服务例子,一家电商公司在双十一前夜把架构从 Apache 切到 nginx,服务同样的服务四台机器,原先峰值时 CPU 飙到 95%,切过去之后直接降到 30% 出头。运维老哥当时在群里发了句“卧槽,这玩意儿是怪物吧”。确实,nginx 就像个精瘦的跑者,不背多余的包袱,只专注做一件事——转发请求。
它的配置文件也很有意思,不像 Apache 那样把指令散落在 .htaccess 里到处找,nginx 把所有配置集中在 nginx.conf 一个文件里,用层级块结构组织。server 块定义虚拟主机,location 块匹配 URI 路径。你写配置的时候就像在搭积木,每一层都清晰可查。不过这也意味着每次改动都要 reload 进程,好在 nginx 支持平滑重载——master 进程先读新配置,语法检查通过就拉起新的 worker,旧 worker 处理完手头请求就自动退出。整个过程对用户零感知,这设计在十几年前算是非常前卫了。
有人觉得 nginx 就是个 web server,这有点低估它了。它最被低估的能力其实是反向代理和负载均衡。我见过不少团队,后端用 Java 或者 Go 写一堆微服务,前面全挂一个 nginx 做入口。upstream 模块里配几个后端地址,轮询、IP 哈希、最少连接数,想怎么分就怎么分。更妙的是它还能做健康检查——后端挂了一台,nginx 自动把流量切到别的节点,整个过程不需要人工介入。这种“默默干活不添乱”的性子,确实招人喜欢。
静态文件处理也是 nginx 的强项。sendfile 系统调用直接在内核态把文件从磁盘搬到网卡,不走用户态缓冲区,速度比传统 read-write 模式快好几倍。我测试过,一个 1MB 的图片,nginx 平均响应时间在 5ms 左右,Apache 要 15ms 往上。当然,这跟操作系统调优也有关系,但 nginx 的设计确实把硬件性能榨得更干净。
要说缺点,nginx 的模块系统不算友好。官方模块就那么二十来个,想加个第三方功能得重新编译源码,不像 Apache 那样动态加载 .so 文件。不过好在 OpenResty 这个基于 nginx 的发行版把 lua-nginx-module 集成进去了,你可以在 location 里直接写 lua 脚本做复杂逻辑,算是补上了一块短板。
现在 nginx 已经快二十岁了,市占率长期排在 web server 第一。它没搞什么花哨功能,就是稳、快、省内存。你要是管过几千台服务器的集群,就会明白这种“无聊”有多珍贵。写配置的时候多花点心思,后面运维能少掉一半头发。
Tags:
相关文章
站点是什么意思通俗
知识站点?这个词儿听着挺技术,其实你天天都在用,只是没意识到。 你早上坐地铁,广播里喊“下一站,人民广场”——那个“站”,就是站点。你打开手机地图搜“附近的便利店”,地图上冒出来的小蓝点,那也是站点。你网 ...
【知识】
阅读更多如何调取网站后台
知识去年帮一个做外贸的朋友看他的独立站,发现后台登录页面上挂着个默认的 admin 路径,密码还是 123456。我当场用手机就进去了,整个过程不到十秒。他站在旁边脸都白了——网站跑了两年,订单数据、客户 ...
【知识】
阅读更多webact自动检测密钥
知识有人在GitHub上放了一个内部仓库的截图,项目里硬编码了AWS的Access Key。三小时后,那个仓库被爬虫抓取,攻击者用这个密钥开了二十台高配EC2挖矿。账单出来的时候,运维团队还在查为什么CI ...
【知识】
阅读更多