Nginx 入门实践:WEB 服务器简介
1. Nginx 简介
在传统的 Web 服务器中,每个客户端连接都作为单独的进程或线程进行处理。切换任务时,CPU 必须切换到新任务,并且创建新的运行时上下文会使用额外的内存和 CPU 时间,并且随着并发请求的增加,服务器响应速度会变慢,这会对性能产生负面影响。
Nginx是一款开源、高性能、高可靠的Web和反向代理服务器,并且支持热部署。即使运行数月,也能几乎每天7*24小时运行,无需重启。软件版本热更新,不中断服务。性能是 Nginx 最重要的因素。占用内存少,并发能力强,最多可支持5万个并发连接。最重要的是,Nginx是免费的,可以商业化,而且配置和使用都比较容易。
Nginx的主要使用场景:
- 静态资源服务,通过本地文件系统提供服务;
- 反向代理服务,包括缓存、负载均衡等;
- API服务,OpenResty;
Node.js 对于前端来说并不陌生。 Nginx 和 Node.js 很多概念是相似的,比如 HTTP 服务器、事件驱动、异步非阻塞等等,而且 Nginx 的大部分功能也可以使用 Node.js 来实现。但 Nginx 和 Node.js 并不冲突,而且都有各自擅长的领域。 Nginx 擅长处理底层服务器端资源(静态资源管理和转发、反向代理、负载均衡等),而 Node.js 更擅长处理具体的上层业务逻辑。两者可以完美结合,共同助力前端开发。
我们重点学习如何使用Nginx。
2。相关概念
2.1 简单请求和非简单请求
首先我们来了解一下简单请求和非简单请求。如果同时满足以下两个条件,则为简单请求:
- 请求方法 为以下三种类型之一:
HEAD、GET⓾、♾; - HTTP 标头信息不超过右侧的几个字段:
Accept、Accept-Language、♿❿Last Event-IDContent-Type 仅限于三个值application /x-www-form-urlencoded♿- ,text/pla在;
任何不同时满足这两个条件的行为都被视为非法。简单的请求。
浏览器处理简单请求和非简单请求的方式有所不同:
简单请求
对于简单请求,浏览器会将 字段直接添加到 Origin 字段,字段用于指示该请求来自哪个源(协议+域名+端口)。 如果服务器发现 如果服务器发现 非简单请求 非简单请求是对服务器有特殊要求的请求。例如,请求方法为 将浏览器访问的网站获取数据的请求发送到另一个网站的过程就是跨域请求。 跨域由浏览器的同源策略决定。这是浏览器的重要安全策略。它用于限制来自一个来源的文档或使用来自另一来源的资源加载的脚本之间的交互。它可以帮助阻止恶意文档,为了减少可能的攻击媒介,您可以使用 CORS 配置来覆盖此限制。 关于跨域互联网的解释已经有很多了,这里不再赘述。您也可以直接阅读 MDN 的文档来了解更多信息。以下是同源性和不同起源的一些例子。我想这个程序大家都能看懂。 反向代理与正向代理相对应。它们的区别: 正向代理: 一般的访问过程是 客户端直接向目标服务器发送请求并检索内容。使用正向代理后,客户端改为向代理服务器发送请求并指定目标服务器(源服务器)。然后,代理服务器与源服务器通信、中继请求并检索内容。内容返回给客户端。正向代理隐藏真实客户端,替客户端发送和接收请求,使真实客户端对服务器不可见; 举个具体例子?你的浏览器无法直接访问顾哥。此时,你可以发送一个代理服务器帮助你访问Google,那么这个服务器就称为转发代理。 反向代理:与一般的访问流程相比,使用反向代理后,接收到请求的服务器直接是代理服务器,然后将请求转发到真正处理它的内网服务器,并将结果返回给客户端。反向代理隐藏真实服务器并向服务器发送和接收请求,使真实服务器对客户端不可见。它通常在处理跨域请求时使用。现在,几乎每个主要网站都设置了反向代理。 给你举个具体的例子?,你去餐馆吃饭的时候,你可以点川菜、粤菜、江浙菜。餐厅还有来自三个厨房的厨师???,但作为顾客,您不必担心哪位厨师为您做饭。只需点菜,服务员就会将菜单中的菜品分配给不同的厨师进行特定处理。那么这个服务器就是一个反向代理服务器。 简单来说,为客户端充当代理的一般为正向代理,为服务器充当代理的为反向代理。 正向代理和反向代理的主要原理区别可以参见下图: 一般情况下,客户端向服务器发送多个请求,服务器处理这些请求,并处理一些请求。其中可能需要进行操作。对于一些资源,如数据库、静态资源等,服务器处理完成后,将结果返回给客户端。 对于早期系统,该模型功能需求不复杂,并发请求较少的情况下也能胜任,而且价格实惠。随着信息量的不断增长,访问量和数据量迅速增加,系统运行的复杂度不断增加,这种方式已经不能满足要求。当并发量特别大时,服务器很容易崩溃。 这显然是服务器性能瓶颈导致的问题。除了堆机之外,最重要的办法就是负载均衡。 随着请求的爆发式增长,单机性能再强大也无法满足需求。此时集群一词诞生了。对于单台服务器无法解决的问题,可以使用多台服务器,然后将请求分发到每台服务器上。在服务器上,负载分布在不同的服务器之间。这是负载平衡。本质是“分担压力”。 Nginx实现负载均衡,一般是指将请求转发到服务器集群。 给我一个具体的例子吗?晚高峰乘坐地铁时,车站门口经常会有地铁工作人员讲话,“请从B口出站,B口人少,车空……”,这位工作人员的作用就是负载均衡。 为了加快网站的分析速度,动态页面和静态页面可以由不同的服务器进行分析,以提高解析的速度,减轻原有单服务器的压力。 一般情况下,必须区分动态资源和静态资源。由于Nginx的高并发和静态资源缓存,静态资源往往部署在Nginx上。如果请求的是静态资源,则直接进入静态资源目录获取资源。如果是动态资源的请求,则利用反向代理的原理,将请求转发给相应的后台应用程序进行处理,从而实现动静分离。 采用前后端分离后,可以大大提高静态资源的访问速度。即使动态服务不可用,也不会影响静态资源的访问。 作者:SHERlocked93Origin![]()
Origin指定的来源不在权限范围内,服务器将返回正常的HTTP响应。浏览器收到响应后,会检测到响应的头信息中不包含Access-Control。 -Allow-Origin字段,向XHR的error事件抛出错误; Origin指定的域名在权限范围内,则服务器返回。响应将包含多个以 ❀Access-♿ 开头的标头信息字段。 PUT 或 DELETE,或 Content Type son 的值。浏览器在正式通信之前会发送 HTTP 预检查 OPTIONS 请求。它首先询问服务器当前网页的域名是否在服务器的白名单中,以及可以使用哪些HTTP请求方法和头信息。场地。只有收到肯定响应后,浏览器才会发送正式的 XHR 请求,否则会报错。 2.2 跨域
# 同源的例子
http://example.com/app1/index.html # 只是路径不同
http://example.com/app2/index.html
http://Example.com:80 # 只是大小写差异
http://example.com
# 不同源的例子
http://example.com/app1 # 协议不同
https://example.com/app2
http://example.com # host 不同
http://www.example.com
http://myapp.example.com
http://example.com # 端口不同
http://example.com:8080
复制代码2.3 正向代理和反向代理
![]()
2.4 负载均衡
![]()
2.5动静态分离
![]()
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网