Nginx编译安装优化
nginx,作为一个自由的、开源的web服务器,由于其高并发、反向代理、扩展丰富、资源占用少等特点,有越来越多的用户开始使用。nginx相对apache来说,相同环境配置下的并发请求量大概是6-10倍的样子,而内存、CPU消耗为1/5、1/10,一个nginx进程差不多15M内存左右,所以对于一个运维人来说,nginx安装是必须会的。
nginx安装有两种访问,一种是利用包管理器直接安装,也是新手最简单的安装方式,另一种是源码包编译安装。源码包编译安装的有点就是灵活,扩展方便,且据说性能要比直接包管理器安装要好,对于很多人说的包管理器安装无法安装最新版、无法升级到最新版等问题,纯属扯淡,不存在,只要你能找到一个好的源。但是今天主要讲编译安装nginx的一些方法。网上有很多编译安装教程,也有一键安装包,这里不再长篇大论的描述nginx整个编译安装的步骤,只说几个编译安装的小方法。
本文全部以nginx最新版本1.13.8为例。
正常情况下,我们在请求某个网站或应用是,可以在返回的数据包头部,看到web服务的信息,包括web名称,版本号等信息,这些信息的暴露,会直接影响到网站以及服务器的安全,所以需要在编译的时候,修改或隐藏掉服务及版本信息
修改方法:
[root@localhost nginx-1.13.8]# vim src/core/nginx.h +13
修改上图NGINX_VERSION为你想设置的版本号,修改NGINX_VER为你想要显示的web名称
[root@localhost nginx-1.13.8]# vim src/http/ngx_http_header_filter_module.c +49
修改上图nginx处,改成想要在HTTP头信息中回显的web名称
[root@localhost nginx-1.13.8]# vim src/http/ngx_http_special_response.c +22
修改上图NGINX_VER处,这里是http错误码的返回。
Tcmalloc是google开发的,与标准的glibc库和malloc相比,它在内存分配上效率和速度要更高,它主要影响malloc和free,用于降低频繁分配、释放内存造成的性能损失,并且有效的控制内存碎片。
在64位系统上需要先安装libunwind
[root@localhost src]# wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.2.tar.gz
[root@localhost src]# tar -zxvf libunwind-1.2.tar.gz
[root@localhost src]# cd libunwind-1.2
[root@localhost libunwind-1.2]# ./configure
[root@localhost libunwind-1.2]# make && make install
下载安装Tcmanlloc
[root@localhost src]# git clone https://github.com/gperftools/gperftools.git
[root@localhost gperftools]# ./autogen.sh
[root@localhost gperftools]# ./configure
[root@localhost gperftools]# make && make install
[root@localhost gperftools]# echo "/usr/local/lib" >> /etc/ld.so.conf
[root@localhost gperftools]# ldconfig
--with-google_preftools_module
安装完nginx后,在nginx主配置文件中添加
google_preftools_profiles /path/to/profile;
为gperftools创建线程目录
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
上面的/path/to/profile改为/tmp/tcmallow,启动nginx,并用lsof命令查看tcmalloc是否正常加载
默认的nginx编译选项里使用debug模式的,会插入很多不必要的内容,编译以后文件有好几兆,所以这里去掉nginx的debug模式编译,完成后可执行文件只有几百K。
[root@localhost nginx-1.13.8]# vim auto/cc/gcc +172
如同注释掉图上的一行,重新编译。
如图,编译后只有880K。
欢迎分享和关注,运维实谈,不定期分享纯干货!
【nginx优化】使用socket方式链接Nginx优化php-fpm性能
【环境配置】Postfix2.10+ssl+dovecot搭建邮件服务器
【实践分享】Linode VPS和Vultr VPS使用体检对比
【开源工具】Sersync实现数据同步