您现在的位置是:热点 >>正文
查看Nginx版本
热点27318人已围观
简介生产环境里出了个诡异问题,页面样式突然全丢了。查了半天,最后发现是Nginx版本太老,HTTP/2的推送功能跟新浏览器不兼容。你看,版本这事儿,平时不起眼,关键时刻能卡你一整天。 查版本这事儿,说难不 ...
生产环境里出了个诡异问题,版本页面样式突然全丢了。版本查了半天,版本最后发现是版本Nginx版本太老,HTTP/2的版本推送功能跟新浏览器不兼容。你看,版本版本这事儿,版本平时不起眼,版本关键时刻能卡你一整天。版本
查版本这事儿,版本说难不难,版本但坑不少。版本最直接的版本办法,nginx -v,版本回车,版本输出类似nginx version: nginx/1.18.0。注意,是小写的-v,只输出版本号。要是你手滑用了大写的-V,那输出可就热闹了——编译参数、模块列表、配置文件路径,全给你列出来。我一般直接上-V,反正看版本的同时,顺便确认下有没有编译进我想要的那几个模块,比如--with-http_v2_module。
但这里有个坑。你敲nginx -v,如果系统里装了多个Nginx,或者用的不是默认路径,那查出来的可能根本不是你在跑的那个。比如你用Docker,容器里的Nginx跟宿主机上的版本可能完全两码事。我吃过这个亏,在宿主机上查出来是1.22,结果容器里跑的还是1.16,排查问题的时候对着错误版本找原因,纯属浪费时间。
所以,更靠谱的做法是直接问运行中的进程。用ps aux | grep nginx找到master进程的PID,然后ls -l /proc/PID/exe,看这个符号链接指向哪个可执行文件。那个路径,才是真正在跑的Nginx。拿到路径后再执行/usr/local/nginx/sbin/nginx -V,这回输出的版本和参数,绝对错不了。
还有一种情况,你连服务器都登不上去,只能通过HTTP响应头来猜。Nginx默认会在响应头里带Server: nginx/1.18.0,但很多运维会把这个版本号隐藏掉,或者干脆改成一个假版本。这时候你可以用curl -I http://你的域名看返回头,要是什么都没有,那也没辙,只能等能登服务器的时候再查了。
查版本本身不是目的,关键是知道版本号之后怎么办。如果发现版本太老,比如还在用1.10以下的,那HTTP/2、gRPC这些新特性基本跟你无缘,性能和安全都吃亏。另外,老版本通常意味着安全漏洞没补上,CVE库里有大把针对老Nginx的利用脚本。别问我为什么知道,去年我检查过一批线上服务器,有台还在跑1.8.0,那个版本有个路径穿越漏洞,吓得我当场就安排升级了。
升级Nginx之前,记得先备份nginx.conf,还有conf.d目录下的所有配置文件。升级完用nginx -t测试一下配置语法,确认没问题再平滑重载nginx -s reload。要是升级后出现奇怪的问题,比如rewrite规则不生效,多半是版本差异导致的语法变化,去查官方changelog,比对一下就行。
最后说个实际技巧。写脚本批量检查多台服务器版本时,别一个个手动登录,用Ansible或者pssh跑一条命令:nginx -v 2>&1 | grep -o 'nginx/[0-9.]*'。注意,nginx -v的输出是写到stderr的,不加2>&1重定向,grep什么都抓不到。这细节,新手容易栽跟头。
版本号这玩意儿,看着简单,背后是兼容性、安全性、功能特性的一堆权衡。下次再遇到莫名其妙的问题,先别急着改代码,查查Nginx版本再说。说不定就跟我那次一样,罪魁祸首就是版本太老。
Tags:
相关文章
男子破解彩票中奖公式
热点男子破解彩票中奖公式 他叫陈立,四十岁出头,戴一副半框眼镜,在杭州一家互联网公司做数据架构师。三年前他干了一件让周围人瞠目结舌的事——用Python写了套算法,专攻“双色球”的号码分布规律。结果呢?他 ...
【热点】
阅读更多免费编程网站有哪些
热点免费编程网站有哪些 我见过太多人卡在“想学编程但不知道从哪下手”这一步。其实根本不用花钱买课,浏览器打开就能写代码的网站,比你想的多得多。最直接的一个是 Codecademy,它把Python、Ja ...
【热点】
阅读更多苹果null怎么打开
热点苹果null,这名字听着就像个bug。可它偏偏是真实存在的水果——不是转基因,也不是实验室产物,是日本青森县果农在偶然嫁接中得到的自然变种。它的果肉切开后会在空气中迅速氧化成深褐色,看起来像系统报错时 ...
【热点】
阅读更多