前端需要了解的nginx基本概念及常用场景实现 - 图1
    题外话:Apache、nginx、Lighttpd、IIS、Boa、Jigsaw
    1.Apache
    Apache(Apache HTTP Server)是目前广泛流行的Web服务器软件,具有开放源代码、跨平台、安全稳定等特点。Apache是伴随互联网的兴起共同成长的,经过多年的技术沉淀和积累,已经非常成熟和稳定,具备了大量的功能模块和扩展。但由于Apache在设计之初对性能和资源的消耗没有过多的关注,导致在应对高并发的业务场景时,被一些轻量级的高性能Web服务器赶超。

    2.Lighttpd
    相对于Apache服务器,由德国人发起的轻量级开源Web服务器软件Lighttpd,不仅实现了Apache的常用功能,同时还保持了轻量级的优势,具有低内存开销、低CPU占用率、性能高以及模块丰富等特点。目标是专门针对高性能网站提供一个安全、快速、兼容性强且配置灵活的Web服务器环境。

    3.Nginx
    Nginx是一个轻量级开源Web服务器软件,可以作为反向代理、负载均衡与缓存服务器使用。Nginx和Lighttpd都是为高并发网站的应用场景而设计的。随着技术发展和业务需要,Nginx逐渐受到关注,在国内如百度、淘宝、腾讯、新浪、网易等网站都开始使用Nginx来满足一些高并发访问的需求。

    4.IIS
    IIS(Internet Information Services互联网信息服务)是Microsoft(微软)公司的Web服务器产品,运行在WindowsServer平台,具有图形界面管理工具。 IIS是目前被广泛采用的Web服务器软件之一,在全球占有相当大的市场份额。 但作为付费软件,需要支付一定的软件成本。其自身也有不少缺点,远不如上述几种web服务软件好用。

    Web服务器 nginx apache Lighttpd
    反向代理 非常好 一般
    Rewrite规则 非常好 一般
    FastCGI 非常好
    热部署 支持 不支持 不支持
    系统压力比较 很小 很大
    稳定性 非常好 一般
    安全性 一般 一般
    技术资料 很少 非常多 一般
    静态文件处理 非常好 一般
    虚拟主机 支持 支持 支持
    内存消耗 非常小 很大 非常小


    FastCGI https://www.jianshu.com/p/565217337247
    前端需要了解的nginx基本概念及常用场景实现 - 图2
    一、nginx介绍
    nginx 是使用c语言开发的高性能的web和反向代理服务器及电子邮件(IMAP/POP3)代理服务器。官方测试nginx能够支撑五万并发数,实际生产环境中也能达到2-4万,并且cpu、内存等资源消耗非常低,运行非常稳定
    二、运用场景
    静态资源服务-通过本地文件系统提供服务
    动静分离-为了加快网站的解析速度,可以把动态页面和静态请求分开。分离资源减少不必要的请求消耗,减少请求延迟,加快解析速度,降低原来单个服务器的压力。

    前端需要了解的nginx基本概念及常用场景实现 - 图3 前端需要了解的nginx基本概念及常用场景实现 - 图4 前端需要了解的nginx基本概念及常用场景实现 - 图5



    负载均衡-当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力(我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况),实现方式(轮询、weight权重、ip_hash、fair、url_hash)

    轮询
    前端需要了解的nginx基本概念及常用场景实现 - 图6
    权重
    前端需要了解的nginx基本概念及常用场景实现 - 图7
    ip_hash
    前端需要了解的nginx基本概念及常用场景实现 - 图8
    Fair-依赖nginx-upstream-fair
    前端需要了解的nginx基本概念及常用场景实现 - 图9
    url_hash
    前端需要了解的nginx基本概念及常用场景实现 - 图10

    反向代理服务-直接请求的服务器是代理服务器,以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,得到的结果返回给客户端(隐藏了真实服务器)
    前端需要了解的nginx基本概念及常用场景实现 - 图11
    正向代理服务-正常流程是客户端直接向目标服务器发送请求并获取内容,正向代理是客户端向代理服务器发送请求,并指定目标服务器,然后由代理服务器、目标服务器通信。转交请求并获得内容,再返回客户端(客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端,隐藏了真实客户端)
    前端需要了解的nginx基本概念及常用场景实现 - 图12

    API服务-nginx采用模块化设计,一些第三方模块可以直接读写数据库,所以nginx可以通过安装第三方模块来操作数据库,有lua模块提供这样的操作。 (openresty)https://blog.csdn.net/forezp/article/details/78616698

    三、安装
    yum list | grep nginx
    前端需要了解的nginx基本概念及常用场景实现 - 图13
    yum install nginx

    四、常用指令
    Ø nginx -s reload 重新加载配置文件
    Ø nginx -s reopen 重启nginx
    Ø nginx -s stop 快速关闭
    Ø nginx -s quit 进程处理完成后关闭
    Ø nginx -t 检查nginx配置与法是否正确
    Ø ps -ef | grep nginx 查看nginx进程
    Ø Kill -9 1012 强制关闭进程

    五、配置说明

    前端需要了解的nginx基本概念及常用场景实现 - 图14
    conf.d 子配置文件夹
    nginx.conf 主配置文件;
    fastcgi.conf、fastcgi.conf.default、fastcgi_params、 fastcgi_params.default fastCGI相关参数

    nginx.conf文件说明:
    前端需要了解的nginx基本概念及常用场景实现 - 图15
    前端需要了解的nginx基本概念及常用场景实现 - 图16
    location匹配规则:
    前端需要了解的nginx基本概念及常用场景实现 - 图17
    location = /uri #精确匹配,优先级最高
    location ^~ /uri #普通字符串匹配,不支持正则表达式,当匹配成功后停止其他location匹配,优先级高于正则
    location ~ #区分大小写的正则匹配
    location ~* #不区分大小写的正则匹配
    location /uri #前缀匹配
    location / #通用匹配

    六、跨域
    l 反向代理解决跨域
    前端需要了解的nginx基本概念及常用场景实现 - 图18
    反向代理还可以设置其他信息:
    Ø proxy_set_header 更改来自客户端的请求头信息
    Ø proxy_connect_timeout nginx与后台代理建立连接的超时时间
    Ø proxy_read_timeout nginx向后端服务器发出read请求等待的超时时间
    Ø proxy_send_timeout nginx向后端服务器发出write请求等待的超时时间
    Ø proxy_redirect 修改后端服务器返回的响应头中的Location和Refresh
    l 配置 header 解决跨域
    前端需要了解的nginx基本概念及常用场景实现 - 图19

    七、配置 gzip
    前端需要了解的nginx基本概念及常用场景实现 - 图20
    Ø gzip_types 压缩文件类型
    Ø gzip_static nginx检查请求静态文件是否以gz 结尾,如果有则直接返回该 .gz 文件内容
    Ø gzip_proxied nginx做为反向代理时启用,用于设置启用或禁用从代理服务器上收到相应内容 gzip 压缩
    Ø gzip_buffers 处理请求压缩的缓冲区数量和大小(一般使用默认值),上图表示:一个系统内存页为8k,申请16倍空间
    Ø gzip_comp_level gzip压缩级别(1-9),级别越底压缩速度越快文件压缩比越小(级别越高,对处理性能要求更高)
    Ø gzip_min_length 当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩。
    Ø gzip_http_version 默认 1.1,启用 gzip 所需的 HTTP 最低版本

    官网配置信息http://nginx.org/en/docs/http/ngx_http_gzip_module.html

    八、适配pc、移动($http_user_agent)
    前端需要了解的nginx基本概念及常用场景实现 - 图21
    九、https配置
    前端需要了解的nginx基本概念及常用场景实现 - 图22前端需要了解的nginx基本概念及常用场景实现 - 图23
    前端需要了解的nginx基本概念及常用场景实现 - 图24
    ssl_certificate 证书文件 ssl_certificate_key 秘钥文件 ssl_protocols ssl协议
    ssl_ciphers 加密算法
    ssl_prefer_server_ciphers on时,在使用SSLv3和TLS协议时,服务器加密算法将优于客户端加密算法
    http://nginx.org/en/docs/http/ngx_http_ssl_module.html

    十、https、http同时支持
    前端需要了解的nginx基本概念及常用场景实现 - 图25