Nginx优化实战(1)

Nginx基本安全优化

隐藏版本号

修改配置文件nginx.conf

在http字段或者其他字段中添加

server_tokens off;

客户端进行访问展示如下:

 

 

 

 

 

 

 

更改源代码,隐藏Nginx软件名和版本号

1.找到源代码存放位置,修改配置文件

[root@localhost nginx-1.6.3]# vim src/core/nginx.h

#define nginx_version 1006003

#define NGINX_VERSION "1.6.3"

#define NGINX_VER "OWS/" NGINX_VERSION



#define NGINX_VAR "OWS"

#define NGX_OLDPID_EXT ".oldbin"

2.修改配置文件

[root@localhost nginx-1.6.3]# vim src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: OWS" CRLF;

static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

3.修改配置文件

[root@localhost nginx-1.6.3]# vim src/http/ngx_http_special_response.c



static u_char ngx_http_error_full_tail[] =

"<hr><center>" NGINX_VER "</center>" CRLF

"</body>" CRLF

"</html>" CRLF

;

static u_char ngx_http_error_tail[] =

"<hr><center>OWS</center>" CRLF

4.进行重新编译nginx,使其生效。

 

更改nginx服务默认用户

1.[root@localhost ~]# grep '#user' /applocation/nginx/conf/nginx.conf

#user nobody;

2.为nginx创建新的用户

#useradd nginx -s /sbin/nologin -M 创建nginx用户,不让他登陆

#id nginx 检查nginx用户

3.修改配置文件,使服务使用刚刚建立的nginx用户

user nginx nginx;

4.重启nginx服务,检查用户

# nginx -s reload

[root@localhost ~]# ps -ef |grep nginx |grep -v grep

root 1491 1 0 18:27 ? 00:00:00 nginx: master process nginx

nginx 1532 1491 0 18:56 ? 00:00:00 nginx: worker process

 

优化nginx服务器的worker进程个数

1.修改nginx的主配置文件 nginx.conf

worker_processes 1;

此配置根据cpu核数进行设置

查看当前配置cpu

grep processor /proc/cpuinfo |wc -l 个数

grep 'physical id' /proc/cpuinfo |sort |uniq |wc -l 核数

也可以通过top命令进行查看

#top 按1

 

 

核数为1,那么 worker_processes 就设置为1即可

修改完成进行重启nginx

#nginx -t

#nginx -s reload

2.通过查看进程,查看nginx进程数量

#ps -ef |grep nginx |grep -v grep

 

绑定不同的nginx进程到不同的cpu上,因为多个nginx进程可能跑在某一个cpu上,可以多个cpu的负载均衡。

下面对四核cpu进程进行优化,演示如下

worker_processes 4;

worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity : 此字段代表ngin进程和cpu亲和力,把不同的进程分配给不同的cpu进行处理

0001 1000 都是代表 掩码 ,参数位置为main区块

 

修改完成后优雅重启nginx 在进行压力测试

ab -n 1000 -c 100 http://192.168.1.251/phpinfo.php

使用top命令进行查看cpu负载情况,cpu占用基本为平均

 

nginx事件处理模型优化

nginx的连接处理机制在不同的操作系统采用不同的I/0模型,本机使centos系统,默认为epoll多路复用模型,如果想了解更过不同操作系统所对应的模型,请自行百度去。还有 记住,apache采用的select模型

具体配置看下面,傻不愣登的

1.修改nginx主配置文件nginx.conf。在events区块中添加字段,events区块是干嘛的?忘了吧,他是设定nginx的工作模式以及连接数上限的。别鸡儿瞎添加

 

events {

worker_connections 1024;

use epoll ; ?? use 事件模块指令

}

 

其实吧,在nginx的官方文档中提示:并不需要指定事件处理模块,nginx会自动选择最佳的事件处理模块 。。。。。哈哈哈

小插曲:什么是I/O

 

输入/输出 (input/output) 的缩写。键盘是一种输入设备,而打印机是一种输出设备。一般来说,i/o 活动和运算活动是可以区分的。例如,程序将文档传送至打印机时,就是在进行输出活动;而程序为术语列表排序时,就是在进行运算活动。比如内存,磁盘读取,cpu I/O啊什么的。

调整nginx单个进程允许的客户端最大连接数

1.这个就是上面的events模块中的worker_connections 模块

同样,修改nginx主配置文件nginx.conf

events {

worker_connections 1024;

use epoll ;

}

一般修改为65535即可,就是鸡儿最大的 !

还要设置本地linux支持最大打开文件数量,不鸡儿改不行

敲命令: ulimit -Hsn 65535 临时设置,文件描述符

也可以在nginx配置文件中添加

worker_rlimit_nofile 65535 ; 别设置在events区块中。好像不行,试了

此参数的作用是改变work_processes能打开的最大文件数量。

 

 

优化服务器域名散列表大小

说明:先要将确切的名字和通配符名字存储在散列表中,散列表和端口关联,每个端口最多进行关联三张表:确切名字的散列表,以星号其实的通配符名字的散列表和以星号结束的通配符名字的散列表,   nginx首先会搜索确切名字的散列表,如果没有找到,则搜索以星号起始的通配符名字的散列表,如果还是没有找到,继续搜索以星号的通配符名字的散列表。

举个栗子:

如果使用nginx.org 和www.nginx.org 来访问服务器为最频繁的,那么我们来定义

server字段

server {

listen 80;

server_name nginx.org www.nginx.org *.nginx.org ;

}

 

如果定义了大量的名字,或者tm非常长的名字,那么就需要在http字段中调用server_names_hash_max_size 和 server_names_hash_bucket_size 的值,

http {

server_names_hash_max_size 512 ; 默认设置512 吧,要不又鸡儿报错

server_names_hash_bucket_size 128; 给大点

 

 

开启高效文件传输模式

sendfile 参数用于开启文件的高效传输模式,可防止网络及磁盘I/O阻塞,提升nginx工作效率

1.修改主配置文件nginx.conf

放置字段 http server location

sendfile on ;

2.设置参数 tcp_nopush on ; 减少网络报文段的数量

和sendfile 相同的字段

设置完检查配置文件,nginx -t 检查语法。更改完配置文件不要记得重启nginx ,先要检查一下语法,这是常识。

 

今天就先到这,明天在写,别几把光写,得背下来。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值