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_size和server_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}},如果没有请添加,即可支持平台的防攻击和流量调度功能;
- 获取请求特征
- 添加修改黑白名单,黑白名单按照规范(各一个,名字路径固定)
- 添加规则
- 上线

浙公网安备 33010602011771号