nginx配置文件

背景:

nginx是一个高性能的HTTP和反向代理服务器,也是一个imap/pop3/smtp服务器。

  • 常常用作负载均衡服务器,占有内存少,并发能力强。模块化的结构便于扩展,异步非阻塞的进程处理机制对于处理大并发是业界前置webserver中表现最好的;
  • 目前百度feed的前置流量接入无论是irrouter层还是业务层odp中的webserver都是采用nginx作为流量接入;
  • nginx.conf中的内容分为 main(全局配置)、server(主机配置)、upstream(负载均衡器配置)、location(url匹配特定位置的设置);

字段解释:

#user nobody

主模块指令,指定nginx运行的用户或用户组为nginx,默认为nobody,主模块指令,指定nginx worker进程运行用户以及用户组

 

worker_processes 8

主模块指令,开启的进程数,多核cpu,建议指定和cpu数量一样多的进程数即可。work_processes定义了nginx对外提供web服务时的worker进程数。

最优值取决于很多因素,包括cpu核的数量、存储数据的硬盘数量以及负载模式

 

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

主模块指令,nginx没有开启多核cpu,我们通过添加worker_cpu_affinity配置参数充分利用多核cpu的性能。cpu是任务处理、计算最关键的资源,cpu核越多,性能就越好。

cpu有多少个核,就有几位数,1表示内核开启,0表示内核关闭。

 

worker_rlimit_nofile 204800

主模块指令,更改worker进程的最大打开文件数量,如果没设置,这个值为操作系统的限制。

设置后你的操作系统和nginx处理比“ulimit -a”更多的文件

 

error_log logs/error_log notice

error_log /home/work/orp/log/error_log notice;

主模块指令,定义全局错误日志,级别以notice显示,还有debug、info、warn、error、critic,debug输出最多,critic输出最少,

 

pid /home/work/orp/var/nginx.pid

主模块指令,指定进程id的存储文件位置,可以使用kill命令发送相关信号,例如如果想要重新读取配置文件,则可以使用kill -hup `cat /var/run/nginx.pid`

 

events{

use poll;

worker_connection 204800;

}

event模块,用来指定nginx的工作模式及连接数上限,use是事件模块指令,用来指定nginx的工作模式

设置工作模式为epoll,除此以外还有select、poll、queue、rtsig或者/dev/poll

epoll是linux下高效的事件处理模式,epoll是多路复用io(i/o multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

 

worker_oconnections 是个时间模块指令,用于定义nginx每个进程能并发处理的最大连接数,默认1024,不能超过最大文件打开数

进程最大文件打开数在linux终端可以输入ulimit -a进行查看,因为work_rlimit_nofile已经重新设置

nginx是linux下最高效的事件处理模式,epoll是多路复用io(i/o multiplexing)中的一种方式,但是仅用于linux2.6以上内核,大大提高linux性能

查看逻辑核数:cat /proc/cpuinfo | grep "processor" | wc -l

查看物理核数:cat /proc/cpuinfo | grep "physical id"| wc -l

查看每个物理核中的core的个数:cat /proc/cpuinfo | grep "cpu cores" | wc -l

 

http{

    include  mime.types;

    web服务收到静态文件请求,依据请求文件的后缀名,mime中包含了该类型文件对应的mime type;

    根据mime type设置对应的content type,然后根据content type的值处理文件;

    设定mime类型,类型由mime.type文件定义,mime.type文件类型:/etc/mime.type

    include upstream.conf

    include包含进upstream模块,将使nginx跨越单机的限制,完成网络数据的接收、处理和转发

    不产生自己的数据,请求后端服务器获取内容,所以称之为上游upstrem

    请求并取得响应内容的整个过程已经被封装到nginx内部

    include /home/work/orp/bin/monitor/rt_base_monitor/nginx_rt_mon.conf; 

    包含nginx监控模块

    default_type application/octet_stream;

    核心模块指令,默认设置为二进制流,文件类型未定义时默认采用这种方式

    Ignore_valid_header off;

    对客户端请求的特殊处理,是否忽略不合法请求

    on 表示默认忽略不合法请求,off 表示不忽略,建议采用off

    server_names_hash_bucket_size 128;

    保存服务器名字的hash表是由指令server_names_hash_max_sizeserver_names_hash_bucket_size所控制

 参数hash_bucket_size总等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了内存中的存取次数后,使在处理器中加速查找hash表键值成为可能

 如果hash_bucket_size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况是在内存中查找的次数为2

 第一次是确定存储单元的地址,第二次是在存储单元中查找键值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小

 client_header_buffer_size 4k;

 现在主流的apache和nginx服务器他们都可以自由设置header的头信息上限大小。我们通过配置文件修改来达到目的。

 large_client_header_buffers 4 32k;

 nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取

 client_max_body_size 3m;

 设置body请求体的大小,并且通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题: 用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_size这个参数,否则会中断在nginx的请求中,在php中是无法记录到访问的

 client_body_buffer_size 8k;

 body请求体默认缓冲区大小,超过默认值8k会报错 

 client_body_timeout 15;

 指令设置请求体(request body)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后,nginx返回HTTP状态码408(“Request timed out”)

 client_header_timeout 10;

 指定等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1)。仅当在一次read中,没有收到请求头,才会算成超时。如果在超时时间内,client没发送任何东西,nginx返回HTTP状态码408(“Request timed out”)

 send_timeout 240;

 sendfile on;

 sendfile:
 

 如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,用read函数把数据从磁盘读到cache,再从cache读取到用户空间的buffer,再用write函数把数据从用户空间的buffer写入到内核的buffer,最后到tcp socket。开启这个参数后可以让数据不用经过用户buffer。

 

 

 

}

 

 

1 防攻击策略

1.1 防攻击提供功能:黑白名单、对满足自定义特征的请求执行相应的处理

1.2 使用的大体步骤

  • 检查配置中的每一个server段中是否有如下配置{{appdispatch_configuration}},如果没有请添加,即可支持平台的防攻击和流量调度功能;
  • 获取请求特征
  • 添加修改黑白名单,黑白名单按照规范(各一个,名字路径固定)
  • 添加规则
  • 上线

 

 
posted @ 2020-04-07 11:45  lidowson  阅读(6)  评论(0)    收藏  举报