和我一起认识Nginx(一)

认识Nginx(engine-x)

Nginx同Apache一样都是web服务器,基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。

Nginx是一个轻量级、高性能的web服务器,但它不仅仅是一个web服务器,而且还可以用作反向代理和IMAP/POP3邮件服务器。

与基于进程的web服务器Apache不同,Nginx是异步的web服务器。这意味着Nginx将产生非常少的线程来支持并发请求或者不产生线程,而Apache Web服务器的每个并发请求都需要一个新线程。因此,Nginx所提供的最出色功能之一就是在高流量负载下只占用很少量的内存。

Nginx的特点

  1. 更快
    一反面,在正常情况下,单次请求会得到更快的响应;另一方面,在数以万计的并发请求下,Nginx可以比其他Web服务器更快地请求响应。

  2. 高扩展性
    Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。

  3. 高可靠性
    Nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定。

  4. 低内存消耗

  5. 单机支持10万以上的并发链接

  6. 热部署
    master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置、更换日志文件等功能。

  7. 最自由的BSD许可协议
    BSD许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数开发者继续为Nginx贡献自己的智慧。

Nginx的代理

实践中客户端无法直接跟服务端发起请求的时候,我们就需要代理服务。代理可以实现客户端与服务端之间的通信,Nginx也可以实现相应的代理服务。代理分为正向代理和反向代理。

正向代理

在如今的网络环境下,我们通过浏览器是没有办法访问国外的某些网站。所以我们想要访问国外的网站,大多数的做法是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

我们可以把上面的代理模式称为“正向代理”。可以看出,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

下面贴一张示意图,简单表示正向代理:
正向代理示意图
总结来说:正向代理,“它代理的是客户端”,是一个位于客户端和原始服务器(Origin Server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)。

然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:

  • 访问原来无法访问的资源,如 Google。

  • 可以做缓存,加速访问资源。

  • 对客户端访问授权,上网进行认证。

  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。

反向代理

我国的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了。这个时候我们可以通过部署多台服务器来解决访问人数限制的问题,也就是“分布式部署”。

那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图

反向代理示意图

图片来源:http://m.imooc.com/article/details?article_id=17148

通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。

反向代理的作用:

  • 保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网。

  • 负载均衡,通过反向代理服务器来优化网站的负载。

项目场景

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在同一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。

具体的拓扑图如下:
项目场景拓扑图

下图说明了正向代理和反向代理之间的区别:
正向代理和反向代理的区别
实际上,Proxy 在两种代理中做的事情都是替服务器代为收发请求和响应,不过从结构上看正好左右互换了一下,所以把后出现的那种代理方式称为反向代理了。

这一篇我带大家认识了Nginx,提到了它的特点以及代理服务。下一篇,我将和大家一起认识Nginx的负载均衡以及它的几个配置文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用nginx作为反向代理服务器时,通常会使用异步框架如asyncio来处理请求和响应。在这种情况下,nginx可以作为Web服务器,接收来自客户端的请求,将其转发到后端的应用程序服务器,并将响应返回给客户端。 要使用asyncio和nginx一起工作,需要创建一个异步服务器并将其绑定到IP地址和端口。在这个服务器上,你可以使用asyncio的协程来处理请求和响应。然后,你需要将nginx配置为将请求转发到异步服务器。 以下是一个使用asyncio和nginx的简单示例: ```python import asyncio async def handle_request(reader, writer): request = (await reader.read()).decode() response = 'Hello, world!' writer.write(response.encode()) await writer.drain() writer.close() async def main(): server = await asyncio.start_server(handle_request, '127.0.0.1', 8000) async with server: await server.serve_forever() asyncio.run(main()) ``` 在这个示例中,我们创建了一个简单的异步服务器,它会响应所有的请求,并返回“Hello, world!”作为响应。 接下来,我们需要配置nginx将请求转发到这个服务器。以下是nginx配置文件的示例: ``` server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 在这个配置文件中,我们将所有请求转发到127.0.0.1:8000,也就是我们的异步服务器。我们还设置了一些代理头,以便异步服务器可以正确地处理请求。 最后,启动nginx并运行异步服务器,你就可以使用asyncio和nginx一起工作了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值