nginx:是一个高性能,轻量级web软件
1、稳定性高(没有Aapache稳定) 2、资源消耗比较低,体现在处理http请求的并发能力很高,单台物理服务器可以处理到3万-5万个请求
稳定:一般在企业中为了保持服务器稳定,并发量的设置在2万个左右,占用内存2M左右
nginx主要功能:1、静态文件服务:nginx可以直接提供静态文件服务,如HTML,CSS,JSP,图片(多种形态的静态文件)
2、反向代理:本身自己可以作为一个反向代理的服务器,将客户端的请求转发给后端多个服务器可以实现负载均衡
正向代理:(了解)
特点:已知后端服务器,请求只会往固定的服务
反向代理:重点
nginx服务器通过轮询算法随机发送给其中一台web服务器
3台web服务器组成的集群形成了负载均衡,其中坏了一台也没事
面试题:什么是反向代理
反向代理的核心:客户端在请求时,沟通代理服务器,会把请求的流量通过轮询算法转发到后台不同的服务器,实现负载均衡。
3、处理动态内容:nginx处理动态内容很差,要转发到后台可以处理动态的应用如PHP,nginx 可以代理请求,发送到后端的动态服务处理,动态服务器处理完之后再通过nginx把动态请求响应给客户端
4、可以实现SSL/TLS加密(HTTPS的加密方式)数字证书认证机制
5、虚拟主机:nginx可以在一台服务器上设置多个主机,同一个服务器可以有多个域名和站点
6、URL重定向,可以实现灵活的URL重写和重定向,例子:想访问百度结果页面跳转到了新浪
7、缓存功能:nginx自带缓存功能
8、日志功能:可以详细的记录请求的信息,包括访问时间,请求路径,ip地址,响应状态
有助于故障排查(系统控制的日志记录在/var/log/messages,业务日志才会保存在自己的日志中)
access.log:记录谁访问了我
error.log:记录谁访问了我,但是记录的是访问失败的
总结:nginx的核心功能 1、静态文件服务 2、反向代理 3、缓存服务
nginx的主要应用场景:1、静态服务 2、反向代理,负载均衡 3、缓存服务 4、动态服务
面试题:nginx是如何实现高并发的?
1、nginx自身代码的问题,大量的底层代理进行了优化,同时自带一个功能模块,epoll模块支持高并发
2、nginx也是一个master进程,控制多个worker进程,master负责收集和分发请求,worker才是实际执行者,每一个请求进来时master就会拉起一个worker进程来处理请求
同时master进程也负责监控worker的状态,worker的数量要和cup一致或是两倍
worker在处理请求的过程中只受内存大小的限制,所以可以处理多个请求,再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身就很少,所以可以起到大并发处理的能力
二者之间相互依赖,相互补充
在/usr/local/nginx路径下查看,有四个文件conf、html、logs、sbin
conf:保存所有nginx的配置文件,最核心的是nginx.conf
html:保存nginx的web文件,这个目录是默认目录可以改
html文件里面还有一个50x.html是nginx默认的错误页面提示
logs:保存日志文件
sbin:nginx二进制的启动脚本,可以结合不同参数进行使用
nginx -t:检测配置文件是否配置正确
-v:查看nginx版本号
-s:向主进程传输信号 停止,开启,重启,重新加载
-c:设置配置文件的默认路径
信号符:信号符结合kill命令
kill-USR1 pid号:日志分割 (pid号为nginx服务的pid号)
kill-s HUP pid号 :只要是kill只能跟pid号,重新加载
killall -s HUP nginx(跟服务名,也可以用pid号)
kill -s QUIT pid号:优雅退出,有人访问时不会结束进程,访问完了才会结束进程
kill -s WINCH pid号:优雅的结束worker,直到请求完成才会结束worker进程
worker_process 工作进程,也就是worker进程的数量,和cpu数量一致或者是两倍
worker_connections 每个进程可以处理的最大连接数
面试题:修改linux服务器文件的最大打开数量
ulimit -n 65535(文件打开的最大数量,linux只支持打开65535个文件) 临时修改
永久配置 vim /etc/security/limit.conf
在最后一行插入
* soft nproc 65535: 最大进程数软限制为 65535,即可以使用 ulimit -u 命令查看和修改的值。
* hard nproc 65535: 最大进程数硬限制为 65535,即最大可分配的进程数。
* soft nofile 65535:最大打开文件数软限制为 65535,即可以使用 ulimit -n 命令查看和修改的值。
* hard nofile 65535:最大打开文件数硬限制为 65535,即最大可分配的文件数。
这里使用的通配符 * 表示对所有用户生效。
最后要重启一下
面试题:
nginx中的conf配置文件:有几个模块,全局模块,event模块,http模块,在http模块中又包含了sever模块,location模块
event模块:配置影响nginx服务器与用户之间的网络连接
http模块:针对http请求的配置,代理,缓存,日志,反向代理,虚拟web主机,server模块
非http请求的方式,不能写在改模块中。反向代理:七层、四层反向代理,不能写在http模块
server模块:配置虚拟主机的相关参数,一个http模块中可以有多个server模块
location模块:匹配的是uri
root和alias的区别:
root 拼接,root指定的目录和location匹配的uri之间做的一个拼接,/opt/ky30/这两个路径都要真实存在,而且都是目录,并且在uri目录里面要有web文件
alias:匹配指定路径下的web文件
root后面有没有/无所谓,加不加都可以 alias加了/,后面也必须要有/,否则匹配不到
/指向/usr/local/nginx/ root指向/usr/local/nginx/html/
root标签可以设置重定向,alias不可以设置重定向
proxy_pass:反向代理配置,也是写在location模块中
总结:全局模块,全局生效,所有模块,用户都生效
event模块:影响nginx和用户的网络连接问题
http模块:主要模块,配置代理,缓存,日志,反向代理,虚拟web主机,server模块
只能是http请求才能写在http模块中
sever模块:包含在http模块中,不能单独设置
location模块:匹配uri包含在server当中也不能单独设置
补充:proxy_pass:反向代理
stream:四层,走的是tcp或udp流量,不能写在http中,要写在全局配置中
upstream:反向代理指定服务器的命令,在http模块中
七层,基于ip和端口,走http协议,只能在http模块中