最基础的Nginx教学

39次阅读

共计 2758 个字符,预计需要花费 7 分钟才能阅读完成。

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。

Nginx 同 Apache 一样都是一种 WEB 服务器。基于 REST 架构风格,以统一资源描述符 URI 或者统一资源定位符 URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。然而,这些服务器在设计之初受到当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个 WEB 服务器有着各自鲜明的特点。Apache 的发展时期很长,它有着很多优点:稳定、开源、跨平台等等。所以它被设计为一个重量级的 WEB 服务器,但是它不支持高并发。在 Apache 上进行并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的 CPU 资源,导致 HTTP 请求的平均响应速度降低。这时候轻量级高并发服务器 Nginx 就应运而生了。

Nginx 为什么会火爆互联网呢?正是由于 Nginx 的几大显著的特点存在:

  • Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接
  • 高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
  • Nginx 是一个跨平台服务器,可以运行在 Linux,Windows,FreeBSD,Solaris, AIX,Mac OS 等操作系统上,这些优秀的设计带来的极大的稳定性

众所周知,Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。而说到代理,又分为正向代理与反向代理。

正向代理

正向代理也是大家最常接触的到的代理模式,那究竟什么是正向代理呢?我们都知道 Google 在国内是无法正常访问的,但是某些时候我们由于技术问题需要去访问 Google 时,我们会先找到一个可以访问 Google 的代理服务器,我们将请求发送到代理服务器,代理服务器去访问 Google,然后将访问到的数据返回给我们,这样的过程就是正向代理。

正向代理的特点

正向代理最大的特点是客户端需要明确知道要访问的服务器地址,Google 服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端,正向代理可以隐藏真实客户端的具体信息。

客户端必须设置正向代理服务器,而且需要知道正向代理服务器的 IP 地址以及代理程序的端口。一句话来概括就是正向代理代理的是客户端,是一个位于客户端和 Google 服务器之间的服务器,为了从 Google 服务器取得数据,客户端向代理服务器发送一个请求并指定目标 (Google 服务器),然后代理向原始服务器转交请求并将获得的数据返回给客户端。

正向代理的使用:

  • 访问国外无法访问的网站
  • 做缓存,加速访问资源
  • 对客户端访问授权,上网进行认证
  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

说完了什么是正向代理,我们接下来看看什么叫做反向代理,如果我们网站每日访问量达到某个上限,单个服务器远远不能符合我们日常需求,这时候我们首先会想到分布式部署。通过部署多台服务器来解决访问人数限制的问题,然后我们功能其实大部分都是通过 Nginx 反向代理来实现的。我们可以看下图:

反向代理的特点

我们可以清楚的看到,多个客户端给服务器发送的请求,Nginx 服务器接收到请求以后,按照一定的规则转发到不同的服务器进行业务逻辑处理。此时请求来源于哪个客户端是确定的,但是请求由哪台服务器处理的并不明确,Nginx 扮演的就是一个反向代理角色。可以这样来理解,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。反向代理代理的是服务端,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的使用:

  • 保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网
  • 负载均衡,通过反向代理服务器来优化网站的负载

正向代理与反向代理区别

  • 在正向代理中,隐藏了请求来源的客户端信息;
  • 在反向代理中,隐藏了请求具体处理的服务端信息;

负载均衡

Nginx 既然扮演了反向代理的角色,它是以依据什么样的规则进行请求分发的呢?分发的规则是否可以控制呢?负载量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。将服务器接收到的请求按照规则分发的过程,称为负载均衡。

Nginx 支持的负载均衡调度算法方式如下:

  • weight 轮询 (默认):接收到的请求按照请求顺序逐一分配到不同的后端服务器,如果在使用过程中,某一台服务器宕机,Nginx 会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。这种方式下,可以给不同的后端服务器设置一个权重值,权重数据越大,服务器被分配到请求的几率越大。
  • ip_hash:每个请求按照发起客户端的 ip 的 hash 结果进行匹配,这样的算法下一个固定 ip 地址的客户端总会访问到同一个后端服务器。
  • fair:智能调整调度算法,动态的根据后端服务器的请求响应时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少。
  • url_hash:按照访问的 url 的 hash 结果分配请求,每个请求的 url 会指向后端固定的某个服务器,可以在 Nginx 作为静态服务器的情况下提高缓存效率。

注意:

  • Nginx 默认不支持 fair 算法,如果要使用这种调度算法,需要安装 upstream_fair 模块。
  • Nginx 默认不支持 url_hash 调度算法,要使用的话需要安装 Nginx 的 hash 软件包。

作为一个 Nginx 的使用者,在编写配置文件肯定出现过问题,可能经常需要将大量时间花费在配置文件编写上面。所以接下来顺便介绍一个在线快速生成 Nginx 配置文件的网站:

https://nginxconfig.io/

这个网站支持 http,https,php,python,Node,缓存,日志等各种配置选项,可以在线生成 Nginx 的配置文件。而且使用方法极其简单,只需要在网站内填写对应的需求,就可以一键生成配置文件。

参数说明:

  • Domain:绑定的域名
  • Path:根目录所在
  • Document root:根目录下的实际项目名称
  • Redirect subdomains:如果访问 *.niyueling.cn 会重定向跳转到 niyueling.cn

然后在下面就可以生成对应的 nginx 配置文件。我们可以下载 zip 包或者直接复制替换我们的配置文件:

然后替换结束服务器 nginx 的配置文件,使用 nginx - t 命令测试文件是否存在问题,若配置文件没问题,则使用 nginx -s reload 命令重启服务器。替换之前为了确保不会发生意外,最好提前做好配置文件的备份。

如果喜欢我的文章,欢迎关注我的个人公众号:程序猿周先森。

正文完
 0