nginx相关优化

4 篇文章 0 订阅

1.并发量
1)nginx参数

# vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes  2;                    //与CPU核心数量一致,起多少进程
events {
worker_connections 65535;        //每个worker最大并发连接数
use epoll;                       //用epoll处理I/O,效率高
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2)优化linux内核参数

# ulimit -a                        //查看所有属性值
# ulimit -Hn 100000                //设置硬限制(临时规则)
# ulimit -Sn 100000                //设置软限制(临时规则)
# vim /etc/security/limits.conf    //永久修改
    .. ..
*               soft    nofile            100000
*               hard    nofile            100000
#该配置文件分4列,分别如下:
#用户或组    硬限制或软限制    需要限制的项目   限制的值
#硬限制是最后限制,只有root可以修改,软限制普通用户可以调整
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3)优化后测试服务器并发量

# ab -n 2000 -c 2000 http://127.0.0.1/
 
 
  • 1

2.优化Nginx数据包头缓存

# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size    1k;        //默认请求包头信息的缓存    
large_client_header_buffers  4 4k;        //大请求包头部信息的缓存个数与容量
.. ..
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.定义对静态页面的缓存时间

# vim /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires        30d;            //针对特定文件,定义客户端缓存时间为30天
}
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4.数据包头部缓存大小调整

# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size    1k;        //默认请求包头信息的缓存    
large_client_header_buffers  4 4k;        //大请求包头部信息的缓存个数与容量
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5.对页面进行压缩处理

# cat /usr/local/nginx/conf/nginx.conf
http {
.. ..
gzip on;                            //开启压缩
gzip_min_length 1000;                //小文件不压缩
gzip_comp_level 4;                //压缩比率,1~9分别是速度与效率的选择,数字越大效果越好,但速度越慢
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
                                    //对特定文件压缩,类型参考**mime.types**,多媒体文件不要压缩比如jpg、mp4、mp3等

.. ..
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

6.服务器内存缓存
如果需要处理大量静态文件,可以将文件缓存在内存,提高访问速度。

http { 
open_file_cache  max=2000  inactive=20s;        //设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄
        open_file_cache_valid    60s;           //文件句柄的有效时间是60秒,60秒后过期
        open_file_cache_min_uses 5;             //只有访问次数超过5次会被缓存
        open_file_cache_errors   off;           //缓存文件错误不报错
} 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

7.查看服务器状态信息
1)编译安装时使用–with-http_stub_status_module开启状态页面模块
2)修改Nginx配置文件,定义状态页面

# cat /usr/local/nginx/conf/nginx.conf
… …
location /status {
                stub_status on;
        }
… …
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3)查看状态页面信息

Active connections
server accepts handled requests
 10 10 3 
Reading: 0 Writing: 1 Waiting: 0
--------------------------------------------------------------------------------------------
Active connections:当前活动的连接数量。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量(一般与accepts一致,除非服务器限制了连接数量)。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

8.删除不需要的模块
Nignx是模块化设计的软件,需要什么功能与模块以及不需要哪些模块,都可以在编译安装软件时自定义,使用–with参数可以开启某些模块,使用–without可以禁用某些模块。最小化安装永远都是对的方案!
下面是禁用某些模块的案例:

# tar -xf nginx-1.12.tar.gz
# cd nginx-1.12
# ./configure \
>--without-http_autoindex_module \            //禁用自动索引文件目录模块
>--without-http_ssi_module
# make
# make install
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

9.修改版本信息,并隐藏具体的版本号
默认Nginx会显示版本信息以及具体的版本号,这些信息给攻击者带来了便利性,便于他们找到具体版本的漏洞。
如果需要屏蔽版本号信息,执行如下操作,可以隐藏版本号。
1)修改配置文件

# vim /usr/local/nginx/conf/nginx.conf
… …
http{
     server_tokens off;                            //在http下面手动添加这么一行
     … …
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2)修改ngx_http_header_filter_module.c源码

# vim +48 src/http/ngx_http_header_filter_module.c
//注意:vim这条命令必须在nginx-1.12源码包目录下执行!!!!!!
//该文件修改前效果如下:
static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;
//下面是我们修改后的效果:
static u_char ngx_http_server_string[] = "Server: Jacob" CRLF;
static u_char ngx_http_server_full_string[] = "Server: Jacob" CRLF;
static u_char ngx_http_server_build_string[] = "Server: Jacob" CRLF;
//修改完成后,再去编译安装Nignx,版本信息将不再显示为Nginx,而是Jacob
# ./configure
# make && make install
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

10.限制并发量
DDOS攻击者会发送大量的并发连接,占用服务器资源(包括连接数、带宽等),这样会导致正常用户处于等待或无法访问服务器的状态。
Nginx提供了一个ngx_http_limit_req_module模块,可以有效降低DDOS攻击的风险,操作方法如下:

# vim /usr/local/nginx/conf/nginx.conf
… …
http{
… …
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
        listen 80;
        server_name localhost;
        limit_req zone=one burst=5;
            }
}
//备注说明:
//limit_req_zone语法格式如下:
//limit_req_zone key zone=name:size rate=rate;
//上面案例中是将客户端IP信息存储名称为one的共享内存,内存空间为10M
//1M可以存储8千个IP信息,10M可以存储8万个主机连接的状态,容量可以根据需要任意调整
//每秒中仅接受1个请求,多余的放入漏斗
//漏斗超过5个则报错
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

11.拒绝非法的请求
网站使用的是HTTP协议,该协议中定义了很多方法,可以让用户连接服务器,获得需要的资源。但实际应用中一般仅需要get和post。

# vim /usr/local/nginx/conf/nginx.conf
http{
       server {
                 listen 80;
#这里,!符号表示对正则取反,~符号是正则匹配符号
#如果用户使用非GET或POST方法访问网站,则retrun返回444的错误信息
              if ($request_method !~ ^(GET|POST)$ ) {
                     return 444;
               }    
        }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

12.防止buffer溢出
当客户端连接服务器时,服务器会启用各种缓存,用来存放连接的状态信息。
如果攻击者发送大量的连接请求,而服务器不对缓存做限制的话,内存数据就有可能溢出(空间不足)。
修改Nginx配置文件,调整各种buffer参数,可以有效降低溢出风险。

# vim /usr/local/nginx/conf/nginx.conf
http{
client_body_buffer_size  1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
 … …
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值