文章目录
- 1.请解释一下什么是 Nginx ?
- 1.Nginx应用场景?
- 1.为什么要用Nginx?
- 1.Nginx的优缺点?
- 1.正向代理与反向代理
- 1.使用“反向代理服务器”的优点是什么?
- 1.Nginx怎么处理请求的?
- 1.Redis为什么那么快?
- 1.Redis是单线程,那怎么监听大量的客户端连接呢?
- 1.为什么Nginx性能这么高?
- 1.Nginx多进程模型是如何实现高并发的?
- 1.为什么 Nginx 不使用多线程?
- 1.Nginx静态资源?
- 1.如何用Nginx解决前端跨域问题?
- 1.location的作用是什么?
- 1.为什么要做动静分离?
- 1.Nginx怎么做的动静分离?
- 1.Nginx负载均衡的算法怎么实现的?策略有哪些?
- 1.Nginx配置高可用性怎么配置?
1.请解释一下什么是 Nginx ?
Nginx ,在我眼里它就是可以充当服务器,比如它可以作为 http server,可以作为反向代理服务器,可以实现负载均衡
Nginx 的主要功能如下:
- 作为 http server
- 反向代理服务器
- 实现负载均衡
(可实现http服务器、反向代理、负载均衡)
1.Nginx应用场景?
- http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
- 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
- nginx中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
1.为什么要用Nginx?
优点:
- 可实现http服务器、反向代理、负载均衡
- nginx处理静态文件好,耗费内存少
- 可实现高并发连接,处理响应快
- Nginx配置简单
- 可以不暴露真实的服务器IP地址
1.Nginx的优缺点?
优点:
- 可实现http服务器、反向代理、负载均衡
- nginx处理静态文件好,耗费内存少
- 可实现高并发连接,处理响应快
- Nginx配置简单
- 可以不暴露真实的服务器IP地址
缺点:
- 动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,
1.正向代理与反向代理
正向代理代理的是客户端,
反向代理代理的是服务端
什么是正向代理?
比如你番茄的时候,你的机子是不能连接外网的,你把请求发给代理服务器,然后由代理服务器去上网,然后请求的资源通过代理服务器返回给你。正向代理总结就一句话:代理端代理的是客户端。
什么是反向代理?
比如有远程想要访问tomcat服务器,直接访问tomcat可能访问量太大导致坏死,现在你部署了tomcat集群,远程的所有请求都打到代理服务器上,代理服务器分发这些请求到tomcat1、tomcat2上面,你可以看到反向代理代理的是服务端
也就是说由代理服务器来接受客户端的连接请求,然后将请求发给服务器并将从服务器上得到的结果返回给给客户端。反向代理总结就一句话:代理端代理的是服务端。
1.使用“反向代理服务器”的优点是什么?
它可以充当中间层,把服务器的真实ip等一些重要的信息隐藏起来,这对于安全方面来说是很好的。
1.Nginx怎么处理请求的?
nginx会监听某个域名和端口,然后使用location匹配URI,匹配成功的话就会访问location里面的地址
server {
# 第一个Server区块开始,表示一个独立的虚拟主机站点
listen 80; # 提供服务的端口,默认80
server_name localhost; # 提供服务的域名主机名
location / {
# 第一个location区块开始
root html; # 站点的根目录,相当于Nginx的安装目录
index index.html index.htm; # 默认的首页文件,多个用空格分开
}
}
1.Redis为什么那么快?
1、内存操作;
2、单线程,省去线程切换、锁竞争的开销;
3、非阻塞IO模型,epoll。
1.Redis是单线程,那怎么监听大量的客户端连接呢?
Redis 基于 Reactor 模式
开发了自己的文件事件处理器
。虽然文件事件处理器以单线程方式运行,但通过使用 I/O 多路复用
程序来监听多个套接字,并根据 套接字目前执行的任务来为套接字关联不同的事件处理器。
当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关 闭(close)等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。
1.为什么Nginx性能这么高?
- 因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
1.Nginx多进程模型是如何实现高并发的?
因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
因为它和Redis有点像,都是有自己的文件事件处理器
。虽然文件事件处理器以单线程方式运行,但通过使用 I/O 多路复用
程序来监听多个套接字,并根据 套接字目前执行的任务来为套接字关联不同的事件处理器。
当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关 闭(close)等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。
1.为什么 Nginx 不使用多线程?
Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存,并发过大会榨干服务器资源。
Nginx: 采用单线程来异步非阻塞处理请求(epoll),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。
Netty、Redis 基本采用相同思路。
1.Nginx静态资源?
- 静态资源访问,就是存放在nginx的html页面,我们可以自己编写
1.如何用Nginx解决前端跨域问题?
- 使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。
举个栗子,例如我们在开发一个Vue应用。
原先:调试页面是:http://192.168.1.100:8080/
,请求的接口是:http://ni.hao.sao/api/get/info
;
现在修改请求的接口为:http://192.168.1.100:8080/api/get/info
然后去Nginx到/usr/local/etc/nginx/目录(这是Mac的),修改nginx.conf文件。
server{
listen 8080;
server_name 192.168.1.100;
location /{
proxy_pass http://192.168.1.100:8080;
}
location /api{
proxy_pass http://ni.hao.sao/api;
}
}
1.location的作用是什么?
- location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。
1.为什么要做动静分离?
- 让静态的资源只走静态资源服务器,动态的走动态的服务器
- Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
- 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。
若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。