实战 nginx 调优

隐藏 Nginx 版本号

修改 nginx 源代码

[root@centos60 ~]# wget http://nginx.org/download/nginx-1.14.1.tar.gz

[root@centos60 ~]# tar xzvf nginx-1.14.1.tar.gz -C /usr/local/src/

[root@centos60 ~]# cd /usr/local/src/nginx-1.14.1/

隐藏 Nginx 版本号,需要一共修改 3 个源代码文件

1、修改 nginx 软件版本号

[root@centos60 nginx-1.14.1]# vim src/core/nginx.h

 12 #define nginx_version      1014001
 13 #define NGINX_VERSION      "8.8.8"
 14 #define NGINX_VER          "XWX/" NGINX_VERSION

2、修改 HTTP 头信息中的 connection 字段,防止回显具体版本号

[root@centos60 nginx-1.14.1]# vim src/http/ngx_http_header_filter_module.c

 49 static u_char ngx_http_server_string[] = "Server: XWX" CRLF;

3、修改 ngx_http_special_response.c 文件定义了 Nginx 报 404 错误时,不回显版本号。

[root@centos60 nginx-1.14.1]# vim src/http/ngx_http_special_response.c

 35 static u_char ngx_http_error_tail[] =
 36 "<hr><center>XWX</center>" CRLF

编译和安装 nginx

1、安装 nginx 时必须先安装相应的编译工具

[root@centos60 nginx-1.14.1]# yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel

gcc c  语言编译器。
gcc-c++ c++ 语言编译器。
autoconf automake 用于 configure 和 make 编译的工具。
zlib :nginx 提供 gzip 模块,需要 zlib 库支持。
openssl :nginx 提供 ssl 功能。
pcre :支持地址重写 rewrite 功能。

2、创建一个 nginx 用户用于后期启动 nginx 进程使用,比你直接使用 root 用户启动 nginx 更安全

[root@centos60 nginx-1.14.1]# useradd -s /sbin/nologin -M nginx

-s #指定登录 shell。
-M #不创建家目录。

3、编译和安装 nginx

[root@centos60 nginx-1.14.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-pcre && make -j 4 && make install

--prefix=/usr/local/nginx 挃定安装路径
--user=nginx --group=nginx 挃定运行 nginx 迚程的用户和组
--with-http_ssl_module 支持 ssl 加密
--with-http_realip_module 此模块支持显示真实来源 IP 地址,当 NGINX 做负载均衡服务器时,需要这个功能,这样能够使得后台服务器记录原始客户端的 IP 地址。
--with-http_gzip_static_module 开启nginx支持gunzip压缩静态文件功能,静态文件压缩后,可以节约带宽
--with-http_dav_module #启用支持 WebDAV 功能。WebDAV 一种基亍 HTTP 1.1协议的通信协议。它扩展了 HTTP 1.1,在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法,使应用程序可直接对 Web Server 直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
--with-http_stub_status_module #启用支持 nginx 监控模块,后期通过调用此模块可以监控nginx 状态。zabbix 也可以通过此模块,来监控 nginx 的性能状态
--with-http_addition_module #启用支持(开启此模块后,nginx 可以在响应 http 请求之前或者之后追加文本内容,比如想在站点底部追加一个 js 戒者 css,可以使用这个模块来实现。)。
--with-http_sub_module #启用支持(此模块为 nginx 替换响应内容的模块,比如当站点出现什么敏感字,需要批量修改所有 web 页面,且想修改很耗时间,可以使用这个模块近行替换。或者想临时在站点中加上一个通用 js 或者 css 之类的文件,也可以使用这个模块。)
--with-http_flv_module #启用支持(支持 HTTP-FLV 方式直播视频)。
--with-http_mp4_module #启用支持(此模块允许 nginx 为 H.264/AAC 编译码的视频文件,如: .mp4、.m4v、和.m4a 扩展名的文件, 提供伪流媒体服务端支持。伪流媒体是不 Flash 播放器一起配合使用的。 播放器向服务端发送 HTTP 请求,请求中的查询串是
以开始时间为参数的,而服务端以流响应,这样流的开始 位置就能亍请求中的时间相对应。)
--with-pcre #启用 perl 正则表达式,perl 的正则表达式一般使用在 location 指令和ngx_http_rewrite_module url 重定向模块中。默认 ngx_http_rewrite_module 是就启用的。

4、启动 nginx 服务

[root@centos60 nginx-1.14.1]# /usr/local/nginx/sbin/nginx

[root@centos60 nginx-1.14.1]# iptables -F

测试 1:查看在 http 协议中是否隐藏了版本和软件名。

测试 2:当访问时,出现 404 及其它错误时也会返回已经隐藏的版本信息

 

修改 nginx 运行用户-设置 nginx 的 cpu 亲和力

修改 Nginx 运行用户

[root@centos60 ~]# vim /usr/local/nginx/conf/nginx.conf

[root@centos60 ~]# /usr/local/nginx/sbin/nginx -s reload  #动态加载配置文件

设置 Nginx 运行进程个数

1、Nginx 运行进程个数一般设置为 CPU 的核心数或者核心数 2 倍

[root@centos60 ~]# top  

输入数字1,查看有4核心cpu

[root@centos60 ~]# vim /usr/local/nginx/conf/nginx.conf

[root@centos60 ~]# yum search pstree

[root@centos60 ~]# yum -y install psmisc

查看 nginx 管理进程和 4 个 work 进程的父子关系:

设置 Nginx 运行 CPU 的亲和力

[root@centos60 ~]# vim /usr/local/nginx/conf/nginx.conf

比如服务器是 8 核 8 线程的 cpu,应该配置为如下:

worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

测试 cpu 亲和力:
没有配置 cpu 亲和力,查看

可以看到 nginx master 进程和 worker 进程是父子关系。

[root@centos60 ~]# taskset -cp 28491
pid 28491's current affinity list: 0-3        #发现 0-3,说明 nginx PID 28491,可以在 4 个 cpu上运行

配置 cpu 亲和力,查看:

[root@centos60 ~]# vim /usr/local/nginx/conf/nginx.conf

[root@centos60 ~]# /usr/local/nginx/sbin/nginx -s reload

[root@centos60 ~]# taskset -cp 28535
pid 28535's current affinity list: 0 #表示 nginx PID 28535,只能在第一个 cpu 运行

[root@centos60 ~]# taskset -cp 28538
pid 28538's current affinity list: 3  #表示 nginx PID 28538,只能在第四个 cpu 运行

设置 Nginx 每个进程最多可以打开的文件数和事件处理模型

Nginx 最多可以打开文件数

[root@centos60 ~]# vim /usr/local/nginx/conf/nginx.conf

这个指令是指当一个 Nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与 n

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值