一、Nginx简介(相关概念)
- 什么是nginx
-
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
-
Nginx专为性能优化而开发,性能是其重要的考量,实现上非常注重效率,能经受高负载的考验,能支持高达50000个并发连接数
-
反向代理
- 正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
- 反向代理:客户端对代理是无感知的。客户端发送请求到代理服务器,由代理服务器去选择目标服务器获取数据后,再返回给客户端。此时,对于客户端来说,反向代理服务器和目标服务器就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器ip地址
个人理解:"正向代理"是代理客户端(浏览器)的,"反向代理"是代理服务器的
-
负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
-
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
二、常用命令
-
使用nginx命令,首先要进入/usr/local/nginx/sbin目录
-
查看nginx版本号
-
启动nginx
-
关闭nginx
-
重新加载nginx
[root@centos sbin]# pwd
/usr/local/nginx/sbin
[root@centos sbin]# ./nginx -v
nginx version: nginx/1.14.2
[root@centos sbin]# ./nginx -s stop
[root@centos sbin]# ps -ef|grep nginx
root 2397 2266 0 17:49 pts/0 00:00:00 grep nginx
[root@centos sbin]# ./nginx
[root@centos sbin]# ps -ef|grep nginx
root 2399 1 0 17:49 ? 00:00:00 nginx: master process ./nginx
nobody 2400 2399 0 17:49 ? 00:00:00 nginx: worker process
root 2402 2266 0 17:49 pts/0 00:00:00 grep nginx
[root@centos sbin]# ./nginx -s reload
三、配置文件
-
路径:/usr/local/nginx/conf/nginx.conf
-
组成:
-
全局块:
从配置文件开始,到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令
例如:worker_processes 1; 值越大,可以支持的并发处理量也越多
-
events块:
主要配置影响Nginx服务器与用户的网络连接
例如:worker_connections 1024; 支持的最大连接数
-
http块
配置最频繁
包括http全局块、server块
-
四、Nginx安装
五、Nginx配置Demo
以下Demo的运行环境:nginx1.14.2版本,安装在虚拟机centos6.8上面。tomcat安装在win10系统上。
六、Nginx原理
1个master:管理、监控
1个或多个worker:执行
客户端请求master时,worker来争抢请求
问题1:一个master和多个worker的好处
- 可以使用nginx -s reload热部署(reload时,没任务的workerreload,有任务的继续做任务,做完了再reload)
- 每个worker是个独立的进程,不需要加锁,效率高
- 多个独立的worker,如果其中的一个worker挂了,其他worker不受影响,服务不会中断
问题2:设置多少个worker合适
底层采用io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是上万个请求也不在话下,每个worker的线程可以把一个cpu的性能发挥到极致,所以worker数和服务器的cup数相等时最为适宜。设少了浪费cpu,多了造成cpu频繁切换上下文带来的损耗。
问题3:发送一个请求,占用worker几个连接数?
2个或4个。
访问静态资源时,nginx找到静态资源服务器,把资源直接返回,占用2个连接;
访问动态资源,nginx访问tomcat,就占用4个连接。
问题4:nginx有1个master,6个worker,每个worker支持最大连接数是1024,支持最大并发数是多少?
若全都访问静态资源,最大并发=worker_connections*worker_process/2 (1024*6/2)
若全都访问动态资源,最大并发=worker_connections*worker_process/4 (1024*6/4)