Nginx是一个高性能的HTTP和反向代理服务器,具备高并发、稳定、支持热部署等特色。咱们经常使用它来进行负载均衡、反向代理和缓存HTTP请求等。html
Nginx选择的进程模型和事件模型与前端开发者熟知的nodejs很类似,都是采用异步非阻塞的方式。Nginx在启动后会开启一个master进程和多个worker进程。其中惟一的master进程的主要做用是用来管理下面的多个worker进程,它并不参与具体的事件处理过程。而这多个worker进程之间是平等的关系,他们独立地竞争来自客户端的请求且同一个请求只能在某一个worker进程中被处理。下面一张图能够形象说明:前端
这里能够认为master进程是整个程序的入口,全部的请求都经它手,再分配给下面的worker进程。另外master进程能够管理worker的状态,当某个worker进程挂掉后,master进程须要关掉它并重启一个。node
Nginx的高并发性就得益于这种进程模型。但有些传统开发者这时就会产生一个疑问:当master手下的worker进程都在工做时,新进来的请求不就没地方处理了吗?这样何来高并发呢?其实这个问题的答案就是异步非阻塞。以往咱们处理一个请求时,须要接受数据,而后进行i/o处理后再返回数据,期间这个i/o操做就占用了大部分的时间。而Nginx的异步非阻塞方式就是当发生i/o阻塞时,worker进程就去处理其余没有阻塞的事件。而这个阻塞完成后再以异步的方式通知到worker进程。至关于准备好的事件源源不断地进入队列来等待worker进程处理,而worker进程也能够节省等待i/o阻塞的时间。nginx
所以,通常推荐nginx设置worker的个数为CPU的核数,这样一个CPU对应一个worker进程,不断地去处理已准备完毕的事件,也不会出现多个进程竞争一个CPU的状况。后端
了解了nginx的原理后,对于不是运维的同窗来讲,平时咱们与nginx打交道最多的地方仍是它的配置文件。Nginx的配置系统通常由一个主配置文件nginx.conf和一些额外的辅助配置文件构成,这些配置文件都是纯文本形式,位于Nginx安装目录的conf目录下。 Nginx的配置文件由相似于字符串的简单指令行和配置块构成。对于简单配置,指令以分号结尾,由配置指令和参数两部分组成,例如:api
worker_processes 8
复制代码
该指令由名为worker_processes的指令和值为8的参数组成,表示Nginx要开启的worker进程个数为8个。 除了简单指令外,Nginx配置还包含一些由大括号括起来的复合配置块。这些配置块的大括号包起来的地方表示处于必定的做用域中,其中的内容通常也是一行行简单指令。例如:跨域
http {
charset utf-8;
}
复制代码
表示所启用的http服务器使用utf-8编码。数组
Nginx经常使用的几个配置块有:http、server、location、upstream等。这些配置块能够按照必定的规则进行相互嵌套,例如若是该http服务支持多个虚拟主机,则http上下文中能够出现多个server上下文。在平常工做中,只要咱们熟悉了经常使用的配置指令,就能够实现大部分功能。附上查询文档:Nginx中文文档、nginx.conf中文详解浏览器
做为前端开发,掌握Nginx的基本使用方式能够大大增强咱们的开发效率。缓存
location ^~ /api {
proxy_pass https://test.com/;
}
复制代码
该配置会代理path为/api开头的请求,并返回https://test.com/返回的数据。
upstream test {
ip_hash;
server 10.100.100.1;
server 10.100.100.2;
}
location /test {
proxy_pass http://test;
}
复制代码
该配置表示路径为test的请求会根据必定的规则分配给10.100.100.1和10.100.100.2这两台服务器。这些规则除了该配置中的ip_hash方式,还有url_hash、指定权重方式等。
location / {
allow 10.100.0.1;
allow 10.100.0.2;
deny all;
}
复制代码
allow和deny指令采用从上到下优先匹配的方式,一旦匹配到就跳出。该配置表示只容许10.100.100.1和10.100.100.2这两个ip访问。
除了以上的几种经常使用功能,Nginx还能够实现图片处理服务、压缩数据、适配多端环境等功能。并且这些功能只须要熟练使用配置指令便可实现。