百度、京东、 易、腾讯、淘宝等大厂都在用的Web服务器Nginx详解

Nginx背景和概述

Nginx(发音同 engine x)是一款基于异步框架的轻量级/高性能由C语言的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·赛索耶夫)所开发,最初供俄国大型 站Rambler.ru及搜寻引擎Rambler使用。

同Apache 一样都是一种WEB 服务器,基于REST 架构风格,以统一资源描述符(Inform Resources ldentifier )URI 或者统一资源定位符(Uniform Resources Locator )URL 作为沟通依据,通HTTP 协议提供各种 络服务。Apache 的发展时期很长。而目是毫无争议的世界第一大服务器,它有着很多优点:稳定、开源、跨平台等等,它出现的时间太长了,它兴起的年代,互联 产业远近比不上现在。所以它被设计为一个重量级的它不支持高并发的服务器,在Apache 上运行数以万计的井发访问,会导致服务器消耗大量内存,操作系统其进行进程或线程间的切换也消耗了大量的CPU 图源,导致HTTP 请求的平均响应速度降低。这些都决定了Apache 不可能成为高性能WEB 服务器,轻量圾高井发服务器Nginx 就应运而生了。

Nginx特点

优点

  • 高并发量:基于 epoll/kqueue 模型开发,支持高并发量,官方说其支持高达 5w 并发连接数的响应。
  • 内存消耗少:善于处理静态文件,相较于其他web(比如:apache),占用更少的内存及资源。
  • 简单稳定:配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定。
  • 节省宽带:支持GZIP压缩,可以添加浏览器本地缓存的Hedear头
  • 内置健康检查:如果nginx后端有服务区宕机了,不影响前端访问,能自动监测服务状态
  • 模块化程度高:功能模块插件化设计,可以自由配置相应的功能。
  • 支持Rwrite重写规则:能够根据域名、URL等请求关键点,实现定制化的高质量分发。
  • 低成本:Nginx的负载均衡功能很强大而且免费开源,相较于几十万的硬件负载均衡器成本相当低。
  • 支持多系统:Nginx代码完全用C语言从头写成,可以在各系统上编译并使用。
  • 缺点

  • 动态处理差:nginx善于处理静态文件,但是处理动态页面相较于Apache之类重量级的web软件能力稍欠缺。
  • rewrite弱:虽然nginx支持rewrite功能多,但是相较于Apache之类重量级的web软件能力稍欠缺。
  • Nginx安装

    安装(Ubuntu为例)

    
    

    检查效果

    
    

    服务相关命令

    
    

    移除相关命令

    
    

    Nginx配置

    相关目录

    Windows:

    
    

    linux:

    
    

    配置文件

    
    

    nginx配置详解

  • 全局配置段
  • 主要是全局性的和服务级别的属性配置,常见的主要有以下几种设置:

    
    
  • http配置段
  • 主要配置server通用的一些配置:

    
    
  • server配置段
  • 常见样式:

    
    

    1.listen属性:

    作用:定义server监听的ip和port,当ip和port匹配时候才进行下一步匹配。

    2.server_name属性:

    作用:定义server监听的域名,当域名匹配时候才进行下一步操作。

    3.root属性:

    作用:定义客户端请求的html文件所在目录路径。表现形式:root /var/www/html;

    4.index属性

    作用:定义客户端请求时默认返回的文件。表现形式:index index.html index.htm index.nginx-debian.html;

  • location配置段
  • location主要是根据server匹配到的请求路径去处理和响应。 根据请求完整url,获取uri(即:除了域名(IP)、Port和路径参数之外的部分),用于location匹配。

    匹配规则:

    匹配优先级:精确匹配>location 完整路径>优先匹配>正则匹配>location 部分路径>通用匹配

    匹配示例:

    
    

    location核心动作:响应时按顺序查找file,找到则返回file内容,否则的话进行内部重定向(uri)或返回状态码(code)。

    常见示例:

    
    

    location常见操作:

    1)基本属性

    
    

    2)临时跳转

    
    

    3)目录列表

    
    
  • 其他说明
  • 1)root VS alias

    root 和 alias 所起的作用都是指定响应请求文件所在的路径,只是它们有区别。

    root 表示 location 匹配内容的相对路径alias 表示 一个绝对路径。

    一般情况下,在location /中配置root,在location /other中配置alias。

    
    

    效果一:访问
    http://localhost/txt/1.txt,nginx找/var/www/txt/1.txt文件效果二:访问
    http://localhost/txt/1.txt,nginx找/var/www/txt/txt/1.txt文件

    2)关于URL尾部的/有如下注意事项

    
    

    访问URL尾部的”/”表示目录,没有”/”表示文件,而且文件找不到的话,会发生重定向。

    
    

    Nginx反向代理

    代理是什么?

    简单来说,我找一个中间人,代替我去做一件事情,只要他给我结果就可以。代理一般分为两种:正向代理反向代理

    区别:

    1)从用途上来讲

  • 正向代理-为局域 客户端向外访问Internet服务,可以使用缓冲特性减少 络使用率。
  • 反向代理-为局域 服务器向外提供Internet服务,可以使用负载平衡提高客户访问量,还可以基于高级URL策略和管理技术对服务进行高质量管控。
  • 2)从安全性来讲

  • 正向代理-必须采取安全措施确保内 客户端通过它访问外部 站,隐藏客户端的身份。
  • 反向代理-对外提供服务是透明的,客户端并不知道自己访问的是一个代理,隐藏服务端的身份。
  • nginx代理配置说明

    示例:

    
    

    proxy_pass指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口 的形式。

    Nginx负载均衡

    上一小节我们使用proxy_pass的方式实现了nginx代理请求到后端服务器的效果,随着我们的 站访问量越来越多,一个后端服务器就不现实了,那么接下来如何在访问量日渐增大的情况下,满足线上业务的稳定呢?解决方法就是:负载均衡

    基本配置

    示例:

    
    

    负载均衡策略

    Nginx提供的负载均衡策略有两种:

    内置策略:nginx自带的算法

  • 雨露均沾型:轮训、加权轮训、哈希
  • 定向服务型:ip_hash、least_conn、cookie、route、lean
  • 商业类型:ntlm、least_time、queue、stick
  • 扩展策略:各种结合业务场景自定义的算法或者第三方算法

  • 自定义算法
  • 第三方算法:fair、url_hash
  • 常用算法简介

  • 轮询(默认):请求按顺序逐一分配到不同的后端服务器。
  • weight:指定轮询权重,值越大,分配到的几率就越高,适用于后端服务器性能不均衡情况。
  • ip_hash:按访问IP的哈希结果分配请求,分配后客户端访问固定后端服务器,有效的解决动态 页会话共享问题。
  • fair:基于后端服务器的响应时间来分配请求,响应时间短的优先分配。
  • url_hash:按访问URL的哈希结果分配请求,使同一URL定向到同一台后端服务器,可提高后端缓存服务器的效率。
  • 加权轮训示例:

    
    

    ip_hash示例:

    
    

    日志解析

    通过对日志文件的分析,可以为 站运营和维护提供相应的数据支持,最常见的场景就是获取客户端的IP,记录用户访问量。

    Nginx默认提供了两个日志文件 access.log和error.log。

  • access.log:可以得到用户请求的相关信息;
  • error.log:可以获取某个web服务故障或其性能瓶颈等信息。
  • 1)基本配置

    
    

    2)默认日志格式

    
    

    自定义日志

    1)设置日志格式

    
    

    2)使用日志格式

    
    

    学完以上的配置,你就基本上可以使用Nginx配置一个简单的比如博客 站,自己买一个服务器然后安装Nginx配置一下文件,把你的博客文件放到指定目录下,然后访问你服务器对应的地址和端口就可以轻松的看到你的博客啦,快去尝试吧!

    当然,Nginx用在大厂上面是需要更多的配置的,以满足高并发下的需求。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2020年1月2日
    下一篇 2020年1月2日

    相关推荐