nginx的特点:
适合处理高并发,因为master进程下控制多个work 进程,一个work进程可以处理的并发数受限制于服务器内存大小,不像apache,要处理高并发需要开启很多个进程处理,一个进程处理一个请求,这样肯定存在进程间不停切换,进程切换导致资源的浪费。
nginx属于异步非阻塞io,适用于io密集型的应用,而apache适用于cpu密集型的应用,
什么是io密集型,比如调用其他系统的时候就会阻塞,这个时候是不会占用cpu计算的,但是会被阻塞住。cpu密集就是进行大量的运算。
nginx配合php使用。
新版本安装php时默认安装php-fpm,需要修改php-fpm.conf配置文件,主要配置项:
1、为php-fpm设置用户和用户组(为了安全性考虑,需要设置这样的用户组,权限最小化)
2、设置listen为sock的文件,多进程处理。(该文件由php-fpm自动生成 php-fpm是用来处理php后缀文件的。)
接下去配置nginx.conf,在里面的server{}里面配置虚拟域名,将fastcgi_pass的值设置为sock的值。
nginx配置文件参数详解:
分类:1、调试配置 2、必须配置 3、优化配置 4、事件类配置
1、debug_connection-事件类配置 :可以用该参数 对指定的客户端进行高并发测试。
2、worker_rlimit_nofile limit : 一个worker进程能打开的最大文件句柄
--- 什么是文件句柄:
nginx配置文件
http-server-location
1、虚拟主机功能实现:server_name,没有找到虚拟主机的情况下
i:先查找listen配置项后面的【default|default_server】的server块。
ii:找到匹配listen端口的第一个server块。
如果有个server_name ‘’ (空字符串) ,表示匹配没有这个host的http头部请求。91页
2、反向代理的配置,什么是反向代理,和liquid的区别,upstream name{} 配置多个web服务器,可以使用很多配置参数,比如ip_hash表示让某一个部分的ip指定到固定的web服务器,server模块中使用proxy表示使用代理。nginx中更多的是对一个web请求进来时所涉及到的各种规则根据网站自身情况进行配置,比如客户端链接限制设置,图片的压缩方式配置,路由的匹配规则,网络连接的设置,
文件优化方式,等等等。
3、nginx模块是为了支持更多的功能,要使用c或者c++实现,这个,,............,,先放着。
正向代理和反向代理的理解:
1、正反是针对用户来说的。比如我要去访问a,不能直接访问,然后通过b再到a,看起来就是正向的。而反向是我们要访问a,a隐藏了其中的细节,a其实是访问了b,但是我们却只知道我们访问了a,这叫做反向。
如何修改nginx的配置参数,以提高它的处理并发的能力;
1、worker_processes : 默认是1,可以设置为cpu核心数。因为该参数是实际处理请求的进程数,所以设置恰当的值可以提高并发能力。
而cpu核心数 = cpu物理核数 * 超线程数。
比如4核的双线程,那么逻辑cpu核心数 = 8;
查询逻辑cpu核数的命令:/proc/cpuinfo| grep "processor"| wc -l
上面的是常规的设置方法,但是专业的做法是根据实际情况设定。
cpu密集型的应用,则按照上面来。
io密集型即存在大量阻塞式进程时,可以配置稍多一些的worker进程数。
什么是阻塞式进程:大量读取磁盘静态资源文件,而服务器上的内存比较较小,会导致磁盘io阻塞。
2、worker_rlimit_nofile :进程可以打开的最大文件数,受限制于操作系统,默认为1024,可以通过ulimit -n 查看。现在绝大部分系统都是65535。
所以可以设置该参数的值为65535。
3、worker_connections: 单个进程的同时建立的最大外部连接数。
受两个因素限制,一个是2中设置的参数worker_rlimit_nofile,一个是内存。10w个连接占用的内存大约为50M左右,所以可以说这个参数是受worker_rlimit_nofile的限制的。