zoukankan      html  css  js  c++  java
  • Nginx服务安全设置和参数调优

    1.添加参数隐藏Nginx版本号

    vim /application/nginx/conf/nginx.conf
    
    #http标签下添加
        server_tokens off;
    
    #测试
    [root@cobbler ~]# curl -I 172.16.1.15
    HTTP/1.1 200 OK
    Server: nginx         #这里已经没有版本号了
    

     2.更改源码隐藏Nginx软件名及版本号

    #通过修改源码将Nginx及版本号替换为其他名称,更改完要重新编译
    1. vim nginx-1.6.3/src/core/nginx.h   #软件信息
    
    #define NGINX_VERSION      "2.2.2"
    #define NGINX_VER          "Peter/" NGINX_VERSION
    
    #define NGINX_VAR          "Peter"
    
    2. vim nginx-1.6.3/src/http/ngx_http_header_filter_module.c   
    
    49 static char ngx_http_server_string[] = "Server: Peter" CRLF;
    
    3. vim nginx-1.6.3/src/http/ngx_http_special_response.c   #报错页面信息展示
     
    22 "<hr><center>" NGINX_VER "(http://www.cnblogs.com/Peter2014/)</center>" CRLF
    29 "<hr><center>Peter</center>" CRLF
    #重新编译后,进行测试
    [root@cobbler nginx-1.6.3]# curl -I 172.16.1.15
    HTTP/1.1 200 OK
    Server: Peter
    

     3.更改Nginx服务的默认用户

    #方法1:修改配置文件
    vim /application/nginx/conf/nginx.conf
    
    user nginx nginx;
    
    #方法2:编译时添加用户参数
    
    ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.6.3 --with-http_stub_status_module --with-http_ssl_module
    

     4.优化worker进程的数量

    #一般而言,worker进程的数量应等于CPU的核数;对于高并发业务,worker进程数量可以等于核数的2倍。
    
    #修改nginx配置文件
    vim /application/nginx/conf/nginx.conf
    
    worker_processes  2;
    
    #查看CPU核心数量
    [root@cobbler ~]# grep processor /proc/cpuinfo | wc -l
    2
    
    #查看物理CPU的个数
    [root@cobbler ~]# grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l
    1
    
    #reload后检查结果
    [root@cobbler ~]# ps -ef | grep nginx
    root      48290      1  0 18:02 ?        00:00:00 nginx: master process sbin/nginx
    nginx     54530  48290  0 20:25 ?        00:00:00 nginx: worker process
    nginx     54531  48290  0 20:25 ?        00:00:00 nginx: worker process
    
    #注:uniq是一个去重命令,但注意aabb可以变为ab,abab则还是abab。所以去重之前要先用sort进行排序。
    

     5.绑定不同worker进程到不同CPU核心上

    #主要使用参数worker_cpu_affinity 配置worker和cpu的亲和度
    
    vim /application/nginx/conf/nginx.conf
    
    worker_processes  4;
    worker_cpu_affinity 0001 0010 0100 1000;  # 这里0001 0010 0100 1000是掩码,分别代表第1、2、3、4核cpu
    
    #假设worker进程数为4,cpu核心数为4,则掩码就为4位,分别对应不同的cpu核心。
    #如果worker进程数为2,cpu核心数为4,则可以按照0101、1010为每个进程分配两个核心。
    #八核cpu则按照00000001、00000010依次分配
    
    #可以使用压力测试工具webbench进行压力测试,top观察每个cpu的使用率
    

     6.Nginx事件处理模型优化

    #Nginx的连接处理机制在不同的操作系统下会使用不同的I/O模型。Linux系统下使用epoll的I/O多路复用模型。
    配置参数为use epoll,注意设置在events标签下,events区块用于设置连接进程。
    
    vim /application/nginx/conf/nginx.conf
    
    events {
        worker_connections  1024;
        use epoll;
    }
    

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

    #参数worker_connections 20480;也是在events标签下设置;注意使用“ulimit -HSn 65535”设置单个进程的文件描述符的最大数量
    vim /application/nginx/conf/nginx.conf
    
    events {
        worker_connections  20480;
        use epoll;
    }
    

     8.配置worker进程打开的最大文件数

    #可以和ulimit的设置的数量一样,main标签下。
    
    vim /application/nginx/conf/nginx.conf
    
    worker_rlimit_nofile 65535;
    

     9.开启高效文件传输模式

    #sendfile()函数用于内核中进行两个文件描述符之间的数据拷贝,由于在内核运行,效率相比read write要高
    #tcp_nopush参数允许将http response header和body的开始部分放在一个文件里进行发布,可以减少网络报文段的数量,提高I/O性能
    #tcp_nodelay用于当数据发送时,内核不会马上发送,会等待更多的字节然后发送以提高I/O性能,如果小文件比较多就不要开启了,
    #不然等待时间会比较长。
    vim /application/nginx/conf/nginx.conf 
    http { 
    sendfile        on; 
    tcp_nopush      on; 
    tcp_nodelay     on;
    }
    

     10.设置连接超时

    #keepalive_timeout用于设置连接超时,当客户端长时间没有请求则关闭tcp连接
    #client_header_timeout用于设置读取请求头数据的超时时间,防止客户端利用http协议进行攻击
    #client_body_timeout用于设置读取请求主体的超时时间,指2次成功读取之间的间隔
    #send_timeout用于设置用户两次活动之间的间隔
    
    vim /application/nginx/conf/nginx.conf
    
    http {
        keepalive_timeout  60;
        client_header_timeout 15;
        client_body_timeout 15;
        send_timeout 25;
    }
    

     11.限制上传文件的大小

    #client_max_body_size用于限制请求主体的大小
    
    vim /application/nginx/conf/nginx.conf
    
    http {
    client_max_body_size 8m;
    }
    
  • 相关阅读:
    浅谈RPC和RESTFUL
    HTTP协议
    为博客园文章添加目录的方法
    Https的介绍
    【Locust】Locust学习总结
    从零开发接口自动化框架
    VMware VCSA 6.7创建和管理Clusters
    VMware ESXi 6.7主机防火墙
    VMware VCSA 6.7分布式交换机
    VMware VCSA 6.7标准交换机
  • 原文地址:https://www.cnblogs.com/Peter2014/p/7678845.html
Copyright © 2011-2022 走看看