重新在./configure安装模块后,模块会刷新,按照当前的正安装的模块来运行!!
一般服务器模块填写 ./configure --with-http_ssl_module --with-http_stub_status_module --with-stream
1.如果客户端访问服务器提示“Too many open files”如何解决 (并发访问量过多)
2.如何解决客户端访问头部信息过长的问题
3.如何让客户端浏览器缓存数据
4.如何自定义返回给客户端的404错误页面
5.如何查看服务器状态信息
6.开启gzip压缩功能,提高数据传输效率
7.如何隐藏nginx header 版本号
八. 服务器内存缓存
9.Nginx安全优化包括:删除不要的模块、修改版本信息、限制并发、拒绝非法请求、防止buffer溢出
一,如果客户端访问服务器提示“Too many open files”如何解决 (并发访问量过多)
1,需要优化Nginx的并发量
测试:用ab(httpd-tools)来模拟并发量 访问192.168.4.5
[proxy] ab -n 2000 -c 2000 http://192.168.4.5/ (斜线必须有的) (模拟2000并发量访问)
显示Too many open files (24) 显示打开文件数量过渡
1.1.lscpu 查看cpu相关信息
解决:修改配置文件,增加并发量性能(1个worker为多少并发量)
vim /usr/local/nginx/conf/nginx.conf
worker_processes 1; (数字是cpc核数,要根据cpu核数来填写,cat /proc/cpuinfo | grep process查看多少核数)
......
events {
worker_connections 60000; (每块cpu处理的量为多少)(这个为并发量,刚刚两千并发超过了1024了。升级高过2000就好)
1.2.打开操作linux系统的内核限制
ulimit -a 查看所有的属性值
ulimit -Hn 10000 设置硬限制 不可以超过两万
ulimit -Sn 10000 设置软限制 不可以超过来万 (以上来种限制都是临时的,永久的在配置文件里面)
测试ab -n 2000 -c 2000 http://192.168.4.5/
vim /etc/security(安全)/limits(限制).conf
.. ..
* soft nofile 100000
* hard nofile 100000
测试ab -n 2000 -c 2000 http://192.168.4.5/
二,如何解决客户端访问头部信息过长的问题
2.1 写个脚本测试头部信息
[root@proxy ~]# cat buffer.sh
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL //经过5000次循环后,生成一个长的URL地址栏
[root@proxy ~]# ./buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center> //提示头部信息过大
2.2修改Nginx配置文件,增加数据包头部缓存大小
vim /usr/local/nginx/conf/nginx.conf
写在http里面
client_header_buffer_size 1k; //默认请求包头信息的缓存
large_client_header_buffers 4 4k; //大请求包头部信息的缓存个数与容量
重新加载并用脚本测试 nginx -s reload ;bash buffer.sh
!!!如果还显示头部信息过长,可以把缓存单位调大一点1M
三,如何让客户端浏览器缓存数据(静态做测试)
3.1 先查看缓存
about:cache显示浏览器缓存信息
点击List Cache Entries可以查看详细信息,记下等会儿做对比
清空浏览器本地缓存信息Cookie,缓存,登陆状态,浏览和下载历史
3.2 修改nginx配置文件,定义对静态页面的缓存时间
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天
}
}
3.3 拷贝一张图片到nginx的页面里 cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html
重加载 nginx -s reload
访问[root@client ~]# firefox http://192.168.2.5/day.jpg
3.4 再次在Firefox地址栏内输入about:cache,查看本地缓存数据,查看是否有图片以及过期时间是否正确。
四,如何自定义返回给客户端的404错误页面
4.1 首先访问一个不存在的网页查看404回复
[root@client ~]# firefox http://192.168.2.5/xxxxx
4.2 修改Nginx配置文件,自定义报错页面
vim 里面 /error 搜索 把后面改写成 error_page 404 /40x.html;
4.3 在定义的页面随便写入信息 达到访问后页面提示效果 vim /usr/local/nginx/html/40x.html
GUN DAN
重加载 nginx -s reload
4.4 测试 [root@client ~]# firefox http://192.168.2.5/xxxxx
常见http状态码
五 如何查看nginx服务器状态信息
5.1 nginx装 --with-http_stub_status_module 模块
5.2 书写配置文件vim /usr/local/nginx/nginx.conf
'''
localtion /status {
stub_status on;
}
...
5.3 重加载 nginx -s reload
查看状态 curl http://192.168.4.5/status
六. 开启gzip压缩功能,提高数据传输效率
gzip on; //开启压缩
gzip_min_length 1000; //小文件不压缩
gzip_comp_level 4; //压缩比率
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
//对特定文件压缩,类型参考mime.types
七. http里写入server_tokens off
http { server_tokens off }
八. 服务器内存缓存
http {
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5; (超过5次访问为热点数据,热点数据会提前缓存 )
open_file_cache_errors off;
//设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄
//文件句柄的有效时间是60秒,60秒后过期
//只有访问次数超过5次会被缓存
}
九.Nginx安全优化包括:删除不要的模块、修改版本信息、限制并发、拒绝非法请求、防止buffer溢出。
优化Nginx服务的安全配置
1) 删除不需要的模块
Nignx是模块化设计的软件,需要什么功能与模块以及不需要哪些模块,都可以在编译安装软件时自定义,使用--with参数可以开启某些模块,使用--without可以禁用某些模块
[root@proxy nginx-1.12]# ./configure \
>--without-http_autoindex_module \ //禁用自动索引文件目录模块
>--without-http_ssi_module
[root@proxy nginx-1.12]# make
[root@proxy nginx-1.12]# make install
2)修改显示在页面的软件名nginx,通过如下方法可以修改该信息。
必须cd 到nginx版本目录下执行执行[root@proxy nginx-1.12]# vim +48 src/http/ngx_http_header_filter_module.c
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
[root@proxy nginx-1.12]# ./configure
[root@proxy nginx-1.12]# make && make install
[root@proxy nginx-1.12]# killall nginx
[root@proxy nginx-1.12]# /usr/local/nginx/sbin/nginx //启动服务
[root@proxy nginx-1.12]# curl -I http://192.168.4.5 //查看版本信息验证
3) 限制并发量
DDOS攻击者会发送大量的并发连接,占用服务器资源(包括连接数、带宽等),这样会导致正常用户处于等待或无法访问服务器的状态。
Nginx提供了一个ngx_http_limit_req_module模块,可以有效降低DDOS攻击的风险,操作方法如下:
配置文件修改
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个则报错
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3.1) 拒绝非法的请求
网站使用的是HTTP协议,该协议中定义了很多方法,可以让用户连接服务器,获得需要的资源。但实际应用中一般仅需要get和post。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http{
server {
listen 80;
#这里,!符号表示对正则取反,~符号是正则匹配符号
#如果用户使用非GET或POST方法访问网站,则retrun返回444的错误信息
if ($request_method !~ ^(GET|POST)$ ) {
return 444;
}
}
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
4) 防止buffer溢出
当客户端连接服务器时,服务器会启用各种缓存,用来存放连接的状态信息。
如果攻击者发送大量的连接请求,而服务器不对缓存做限制的话,内存数据就有可能溢出(空间不足)。
修改Nginx配置文件,调整各种buffer参数,可以有效降低溢出风险。
[root@proxy ~]# 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;
… …
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload