1. 什么是Nginx?
- Nginx 是一个轻量级/高性能的反向代理Web服务器,他实现非常高的反向代理、负载均衡,可以处理2-3w并发连接数,官方监测能支持5w并发。
2. 为什么使用Nginx?
- 跨平台、配置简单、反向代理、高并发连接:处理2-3w并发连接数,官方检测支持5w并发;内存消耗小:开启10个Nginx才占150M内存,nginx处理静态文件好,耗费内存少。
- Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
- 使用Nginx的话还能:
-
-
- 节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
-
-
3. Nginx性能高的原因
- 因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决; 相比与Select/poll(轮询),epoll 主要是使用队列 进行了异步消息的通知。
4. Nginx 怎么处理请求?
- nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址
server { # 第一个Server区块开始,表示一个独立的虚拟主机站点
listen 80; # 提供服务的端口,默认80
server_name localhost; # 提供服务的域名主机名
location / { # 第一个location区块开始
root html; # 站点的根目录,相当于Nginx的安装目录
index index.html index.htm; # 默认的首页文件,多个用空格分开
} # 第一个location区块结果
5. 什么是正向代理和反向代理?
- 正向代理:就是一个请求直接发送到目标服务器
- 反向代理:就是请求统一被Nginx接收,再按照一定的规则分发给后端的业务处理服务器进行处理。
6. 使用反向代理服务器的优点是什么?
- 反向代理服务器可以隐藏源服务器的存在和特征,充当互联网云和web服务器之间的中间层,安全方面足够好。
7. Nginx的优缺点
- 优点:
-
-
- 可实现http服务器、虚拟主机、反向代理、负载均衡。
-
-
- 缺点:
- 动态处理差:nginx处理静态文件号,耗费内存少,但是动态页面则不行。
8. Nginx的应用场景
- http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
- 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
- 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
- nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
9. 如何使用Nginx解决前端跨域问题?
- 使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。
10. Nginx 虚拟主机如何配置?
- 基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
-
- 需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件
#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
server {
listen 80;
server_name www.lijie.com;
location / {
root data/www;
index index.html index.htm;
}
}
#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/bbs目录下文件
server {
listen 80;
server_name bbs.lijie.com;
location / {
root data/bbs;
index index.html index.htm;
}
}
- 基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
#当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
server {
listen 8080;
server_name 8080.lijie.com;
location / {
root data/www;
index index.html index.htm;
}
}
#当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
server {
listen 80;
server_name www.lijie.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
11. 什么是动静分离?
- 让静态的资源只走静态资源服务器,动态的走动态的服务器
- Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术
- 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器。
12. nginx的负载均衡策略?
- 为了避免服务器崩溃,我们会通过负载均衡的方式来分担服务器压力,将服务器组成一个集群,用户访问时,先访问一个转发服务器,再由转发服务器分发到压力更小的服务器。
- 负载均衡实现有以下五种:
-
-
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统
-
-
- 权重weight: weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。权重越高,在被访问的概率越大,如下例,分别是20%,80%
upstream backserver {
server 192.168.0.12 weight=2;
server 192.168.0.13 weight=8;
}
-
-
- ip_hash(ip绑定): 每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问同一个后端服务器,
并且可以有效的解决动态网页存在的session共享问题,如下例:
upstream backserver {
ip_hash;
server 192.168.0.12:88;
server 192.168.0.13:80;
}
-
- *4. fair(第三方插件):需要安装upstream_fair模块,对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配,如下例:
upstream backserver {
server server1;
server server2;
fair;
}
-
- *5. url_hash(第三方插件): 必须安装Nginx的hash软件包,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
13. Nginx 配置高可用?
- 当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用。
server {
listen 80;
server_name www.lijie.com;
location / {
### 指定上游服务器负载均衡服务器
proxy_pass http://backServer;
###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 1s;
###nginx发送给上游服务器(真实访问的服务器)超时时间
proxy_send_timeout 1s;
### nginx接受上游服务器(真实访问的服务器)超时时间
proxy_read_timeout 1s;
index index.html index.htm;
}
}
14. Nginx判别Ip不可访问?
# 如果访问的ip地址为192.168.9.115,则返回403
if ($remote_addr = 192.168.9.115) {
return 403;
}
15. 怎么限制浏览器访问?
# 不允许谷歌浏览器访问 如果是谷歌浏览器返回500
if ($http_user_agent ~ Chrome) {
return 500;
}