Nginx配置详解

啰嗦几句

在Apache服务器上,一个服务器进程在同一时刻只能处理一个网络请求,如果希望apache能够承受更多的并发,那么要启动更多的服务器进程,这使得服务器之间的进程来回切换频繁,耗费过多的系统资源

Nginx模型:一个master进程多个worker进程,master进程只负责管理worker进程,而不负责网络请求
worker进程数最好与当前机器的CPU核心数相同,这样使得每一个worker进程有匹配一个自己的核心
也不用使得进程间来回切换。

当然Nginx高性能不只是因为以上这个层面,还有epoll模型的应用。我们慢慢了解,
使用Nginx核心是什么?当然是配置文件!!

一段简单的配置
    http {
        gzip on;
        server {
            location /api {
                gzip off;
            }
        }
    }
如上,我们大致可以了解到的信息,格式特点
-key value
-可以嵌套,应用级别以json相应val同括号优先级最高
-KV由当前Nginx安装模块来确定是否可以识别
-每个配置项的结尾需要加上分号
时间大小单位:
time含义
ms毫秒
s
m分钟
h小时
d
w
M
y
空间大小单位
space含义
k千字节
M兆字节

配置项的值是否可以使用这些单位,取决于Nginx提供的相应解析模块

配置项,持续更新——

每个worker最大连接数
worker_connections [number]
定义每个worker进程可以同时处理的最大连接数,一般设置为cpu核心数或auto;
选择事件模型
use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport]
对于Linux有三种驱动模型分别是select poll epoll.而性能最高的为EPOLL
是否以master/worker方式工作
master_process on|off
默认为on
是否以守护进程运行Nginx
daemon on|off    
默认都是打开的,Nginx需要守护进程运行
仅对指定的客户端输出debug级别的日志
debug_connection [IP|CIDR]
events{
    debug_connection 10.224.66.14
    debug_connection 10.224.57.0/24
}
这个配置项属于事件类配置,因为它必须放在events中才有效,它的值可以是IP地址或者CIDR地址
绑定Nginx worker进程到指定CPU内核,实现真正的并发[这个参数只有Linux系统才可以]
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001

假定每一个worker进程都是非常繁忙的,如果多个worker进程都在抢同一个CPU,那么就会出现同步问题,
反之,如果一个worker进程都度享一个CPU。那么就在内核的调度策略上实现了完全的并发
Nginx worker进程优先级
worker_priority nice;
默认 worker_priority 0;

进程所分配的CPU时间偏大小与进程优先级相关,
优先级越高,进程分配到的时间偏也就越大。
取值范围  -20~+19  -20是最高优先级, +19是最低优先级。
因此,如果用户希望Nginx占有更多的系统资源。那么可以把nice
值配置的更小一些,但不建议比内核进程的nice值还要小,一般为-5
负载均衡锁开关与lock文件
accept_mutex [on|off]
默认accept_mutex on

accept_mutex 为Nginx的负载均衡锁,这把锁,可以让多个worker进程轮流的,序列化的与新的客户端
建立TCP连接,当某一个worker进程建立的连接数量达到worker_connecions配置的最大连接数的 8分之7时,会
大大的减少该worker进程建立新的TCP连接的机会,以此实现所有worker进程处理请求数量均衡。
如果关闭这个锁,那么建立TCP连接耗时会更短,但是均衡负载将会失效。
所以不建议关闭

当accept锁关闭的时候,lock文件是不生效的,但是当accept锁开启的时候
,由于编译程序,操作系统架构等因素导致Nginx不支持原则锁的时候,就会需要lock
文件持有锁的概念。

在基于i386,AMD64,SPARC64,PPC64的操作系统上,如果使用GCC,intelC++,SunPro C++编译器
来编译Nginx,则可以肯定这时的Nginx是支持原子锁的。因为Nginx会利用CPU的特性并用汇编语言实现它
批量建立新连接
multi_accept[on|off]
默认multi_accept off

当事件模型通知有新连接时,尽可能对本次调度中客户端发起的所有TCP都建立连接.
系统调用gettimeofday的执行频率
timer_resolution t;
比如 timer_resolution 100ms
表示至少每100ms才调用一次gettimeofday

目前大多数内核,如果X86-64的体系架构,gettimeofday只是一个vsyscall,仅仅对共享内存也的数据做访问,
并不是通常的系统调用,代价并不大。一般不用做配置,
但是如果是内核空间到用户空间的内存复制,那么该频率还是有必要配置来提高效率。
一般来讲,日志中的LOG时间误差越小,该频率应该越高
SSL硬件加速
如果服务器上有SSL硬件加速设备,那么就可以进行配置来加快SSL协议的处理速度
ssl_engine device

查看服务器上的ssl加速设备
openssl engine -t
指定Nginx worker进程可以打开的最大句柄描述符个数
worker_rlimit_nofile limit
是指一个worker进程可以打开的最大文件句柄数,理论值得应该为
ulimit -n的值 与CPU核数相除得来
但考虑到分配均匀的问题,基本上设置为ulimit也可以
设定每个用户发往Nginx的信号队列大小
worker_rlimit_sigpending limit;
当某个用户的信号队列满了,那么这个用户再次发送的信号将被丢掉
Nginx Debug与debug限制
是否处理几个特殊的调试点
debug_points [stop|abort]

如果设置为stop,那么Nginx的code执行到这些调试点,
就会发出SIGSTOP信号用于调试。
如果设置为abort,则会产生一个coredump文件,
可以使用gdb来查看nginx当时的各种信息

--限制coredump核心转储文件的大小
worker_rlimit_core size;

此LOG也属于DEBUG日志所以在用本配置项时,要确保configure加入了
--with-debug参数,
本参数在定位问题时很必要。如果不加此限制,
那么一个core文件可能达到几GB。很难以排查问题所在.
嵌入其他配置文件
include/path/file
include mime.types
include vhosts/*.conf
pid文件的路径
pid path/file
默认 pid logs/nginx.pid
保存master进程的ID的pid文件存放路径。
默认与configure执行的参数--pid-path所指定的路径是相同的。

未完!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值