目录
https://blog.csdn.net/LiuMiao1128/article/details/90083611
9、请列举Nginx的一些特性
- Nginx服务器的特性包括:
- 反向代理/L7负载均衡器
- 嵌入式Perl解释器
- 动态二进制升级
- 可用于重新编写URL,具有非常好的PCRE支持
8、请列举Nginx和Apache 之间的不同点
nginx | apache |
1.nginx 是一个基于web服务器 | 1.Apache 是一个基于流程的服务器 |
2.所有请求都由一个线程来处理 | 2.单线程处理单个请求 |
3.nginx避免子进程的概念 | 3.apache是基于子进程的 |
4.nginx类似于速度 | 4.apache类似于功率 |
5.nginx在内存消耗和连接方面比较好 | 5.apache在内存消耗和连接方面并没有提高 |
6.nginx在负载均衡方面表现较好 | 6.apache当流量达到进程的极限时,apache将拒绝新的连接 |
7.对于PHP来说,nginx更可取,因为他支持PHP | 7.apache支持的php python Perl和其他语言, 使用插件,当应用程序基于python和ruby时,它非常有用 |
8.nginx 不支持像ibmi 和 openvms 一样的os | 8.apache支持更多的os |
9.nginx 只具有核心功能 | 9.apache 提供了比Nginx更多的功能 |
10.nginx 性能和可伸缩性不依赖于硬件 | 10.apache 依赖于CPU和内存等硬件组件 |
https://blog.csdn.net/Thanlon/article/details/102579916
7、nginx常用的算法
round-robin:循环轮询算法是nginx默认的负载均衡算法,会把接收到的请求循环的分发给其包含的(当前可用的)服务器。如果设置了两台分发服务器10.0.0.1和10.0.0.2,nginx会把第一个请求发给10.0.0.1,会把第二个请求分发给10.0.0.2,第三个请求又分发给10.0.0.1,这就是所谓的循环轮询。
upstream app {
server 10.0.0.1;
server 10.0.0.2;
}
server {
listen 80;
location / {
proxy_pass http://app;
}
}
least-connected:最少连接,每次都找连接数最少的服务器来转发请求。如果10.0.0.1正在处理的请求数比10.0.0.2正在处理请求数少,如果再来一个请求,nginx会把请求交给10.0.0.1来处理。使用least-connected算法来配置:
upstream app {
least_conn;
server 10.0.0.1;
server 10.0.0.2;
}
server {
listen 80;
location / {
proxy_pass http://app;
}
}
ip-hash:据请求的客户端IP地址来决定当前请求应该交给谁,使用ip-hash算法时Nginx会确保来自同一客户端的请求都分发到同一服务器。
upstream app {
ip_hash;
server 10.0.0.1;
server 10.0.0.2;
}
server {
listen 80;
location / {
proxy_pass http://app;
}
}
weighted:weighted算法也就是权重算法,会根据每个服务的权重来分发请求,权重大的请求相对会多分发一点,权重小的会少分发一点。这通常应用于多个服务器的性能不一致时。需要使用权重算法时只需要在定义服务器组时在服务器后面指定参数weight。可以这样设置:
upstream app {
server 10.0.0.1 weight 1;
server 10.0.0.2 weight 2;
}
server {
listen 80;
location / {
proxy_pass http://app;
}
}
参考:https://blog.csdn.net/qq_42629110/article/details/84968537
6、负载均衡
负载均衡即是代理服务器将接收的请求均衡的分发到各服务器中
负载均衡主要解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量,减少后台服务器大并发压力
tomcatlist{
ip+port[weigth=3],
ip+port[weigth=1],
…
}
location /{
pass_proxy tomcat
}
5、动静态分离
动态资源、静态资源分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离
location ~.(png|jpg|css|js|htm|html){
root /home
}
为什么要做动、静分离
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件)
这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗
当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问
这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中,毕竟Tomcat的优势是处理动态请求
4、Nginx是如何处理一个请求的呢
首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket,再进行listen
然后再fork出多个子进程出来, 子进程会竞争accept新的连接。
此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后
此时,某一个子进程会accept成功,然后创建nginx对连接的封装,即ngx_connection_t结构体
接着,根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换。
最后,nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了
3、为什么Nginx性能这么高
得益于它的事件处理机制:
异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
2、为什么要用Nginx
- 跨平台、配置简单
- 非阻塞、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发;一般情况下,10 000个非活跃的HTTP Keep-Alive连接在nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础。单机支持10万以上的并发连接,理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。
- 内存消耗小::开启10个nginx才占150M内存
- 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
- 节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
- 稳定性高:宕机的概率非常小
- 热部署:master管理进程与worker工作进程的分离设计,使得nginx能够提供热部署功能,即可以在7×24小时不间断服务的前提下,升级nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。
- 接收用户请求是异步的:览器将请求发送到nginx服务器,它先将用户请求全部接收下来,再一次性发送给后端web服务器,极大减轻了web服务器的压力,一边接收web服务器的返回数据,一边发送给浏览器客户端
- 网络依赖性比较低,只要ping通就可以负载均衡
1、什么是Nginx
Nginx是一个高性能的HTTP和反向代理服务器,常用于做负载均衡服务器,也是一个 IMAP/POP3/SMTP 代理服务器。