Nginx

什么是Nginx

Nginx是一个web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。

其特点是占有内存少,并发能力强

Nginx 的主要功能

作为 http server (代替 Apache ,对 PHP 需要 FastCGI 处理器支持)FastCGI:Nginx 本身不支持 PHP 等语言,但是它可以通过 FastCGI 来将请求扔给某些语言或框架处理。反向代理服务器、实现负载均衡、虚拟主机

Nginx 常用命令

启动 (配置了环境变量) nginx

停止 nginx -s stop 或 nginx -s quit

重载配置 ./sbin/nginx -s reload(平滑重启) 或 service nginx reload

重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf

查看 nginx 版本 nginx -v

检查配置文件是否正确 nginx -t

显示帮助信息 nginx -h

Nginx 有的优点

跨平台、配置简单。

非阻塞、高并发连接

处理 2-3 万并发连接数,官方监测能支持 5 万并发。

内存消耗小

开启 10 个 Nginx 才占 150M 内存。

成本低廉,且开源。

稳定性高,宕机的概率非常小

什么是高并发和负载均衡

高并发(会给服务器和硬件环境带来很大的压力)

高并发通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中

单个tomcat支持最高并发

负载均衡(load Balance )

将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀

如何实现高并发和负载均衡

实现高并发

通过Nginx可以实现当实现多个进程出现等待传输(发生阻塞)时,(比如向上游(后端)服务器转发 request ,并等待请求返回。)那么,这个处理的 worker 不会这么傻等着,他会在发送完请求后,注册一个事件:“如果 upstream 返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有 request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker 才会来接手,这个 request 才会接着往下走。

负载策略

请求轮询(默认 )

增加权重

使用服务器权重(weight),还可以进一步影响nginx负载均衡算法,谁的权重越大,分发到的请求就越多。

upstream lzjweight { server 192.168.58.101:8080 weight=2; server 192.168.58.103:8080 weight=1; }

最少连接数、

在连接负载最少的情况下(least_conn),nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。

upstream lzjleast { least_conn; server 192.168.58.101:8080; server 192.168.58.103:8080; }

IpHash

确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用( ip_hash

upstream lzjhash { ip_hash; server 192.168.58.101:8080; server 192.168.58.103:8080; }

什么是正向代理和反向代理

正向代理

一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端

代理人明确买家的目标是谁,代理人帮我们去联系目标

客户端才能使用正向代理

反向代理

反向代理(Reverse Proxy)方式,是指以代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

客户只需要发送请求到代理服务器,代理服务器会将请求转发给内部的服务器去处理,处理完毕之后会将结果返回给客户,整个过程中客户和实际处理服务器是不会直接建立连接的

代理端代理的是服务端。

使用"反向代理服务器"的优点是什么?

反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时。

什么是高可用

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,是在给定时间段内确保高水平的操作性能的系统或组件的质量。

如何解决高可用问题

一个主进程,多个工作进程,每个工作进程可以处理多个请求,每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker继续处理其他请求,而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。由于web server的工作性质决定了每个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即@skoo所说的webserver刚好属于网络io密集型应用,不算是计算密集型

资源静态化

配置静态资源

路径路由规则

location = / { #规则A }
location = /login { #规则B }
location ^~ /static/ { #规则C }
location ~ \.(gif|jpg|png|js|css)$ { #规则D }
location ~* \.png$ { #规则E }
location !~ \.xhtml$ { #规则F }
location !~* \.xhtml$ { #规则G }
location / { #规则H }
访问根目录/, 比如http://localhost/ 将匹配规则A
访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
访问 http://localhost/static/a.html 将匹配规则C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C
访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

请列举 Nginx 和 Apache 之间的不同点?

轻量级,同样起 web 服务,Nginx 比 Apache 占用更少的内存及资源。

抗并发,Nginx 处理请求是异步非阻塞的,而 Apache 则是阻塞型的,在高并发下 Nginx 能保持低资源低消耗高性能。

最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx 是异步的,多个连接(万级别)可以对应一个进程。

Nginx 高度模块化的设计,编写模块相对简单

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页