最近比较系统的学习了nginx,之前虽然用了,但是都是不会就百度复制粘贴的,有些也不理解是什么鬼,能用就行了,对nginx掌握的不够彻底,系统。以下做一些nginx配置的总结,不涉及什么静态服务器配置,负载均衡,正/反代理服务器,缓存服务器。
Nginx是一个开源高性能,可靠的http中间件,代理服务器。
为什么选择nginx?
1:I/O多路复用,多个描述符的I/O操作都能在一个线程类并发交替的顺序完成,复用指的是复用同一个线程。
2:Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cacheloader)和缓存管理器进程(cachemanager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、cacheloader和cachemanager均应以非特权用户身份运行:3:nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。在nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每个worker可以并行处理数千个的并发连接及请求。
nginx配置优化:
1:worker_processes=4;
这个是用来指定nginx的worker进程个数的,一般为cpu核心数的1-2倍。
2:nginx亲核配置:不同的worker进程绑定到不同的cpu核心上,减少进程调度切换cpu的损耗
#worker_cpu_affinity 0001 0010 0100 1000;#手动分配,从右往左数1所在的位置就是所绑定的cpu
worker_cpu_affinity auto;#一般配置成auto就行了,自动分配
3:worker_rlimit_nofile 35535;
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致
但是linux对总的文件句柄有限制,但是你也可以修改:
系统全局修改和用户局部修改
vim /etc/security/limits.conf
Soft 和hard表示soft在超过限制时系统发提醒,但不会影响请求,hard系统会强制影响请求
两行root表示这一行配置针对root用户的,*表示全局配置。
进程局部修改就是通过:worker_rlimit_nofile来说明个数了
4:use epoll 在linux上使用epoll 的I/O 模型
5:worker_connections 20000;
每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
6:sendfile on;
#tcp_nopush on;
tcp_nodeny on;
keepalive_timeout 65;
如果作为静态资源服务器,可以把tcp_nopush打开,动态服务或者keepalive_timeout时打开tcp_nodeny
7:gzip on;
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
打开gzip,在低于ie7时关闭
8:expires 24h;
打开缓存
最后附上完整示例代码:
user nginx; worker_processes 4; #worker_cpu_affinity 0001 0010 0100 1000; #worker_cpu_affinity 1010101010101010 0101010101010101; worker_cpu_affinity auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_rlimit_nofile 35535; events { use epoll; worker_connections 10240; } http { include /etc/nginx/mime.types; default_type application/octet-stream; ####### #Charset charset utf-8; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$request_uri"'; access_log /var/log/nginx/access.log main; ####### #Core modlue sendfile on; #tcp_nopush on; tcp_nodeny on; keepalive_timeout 65; ######## #Gzip module gzip on; gzip_disable "MSIE [1-6]\."; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; ######## #Virtal Server include /etc/nginx/conf.d/*.conf; }
友情提示:垃圾评论一律封号...