Nginx常见问题

重新在./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

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值