前端工程师在理解Nginx之后,就能更好的与后端工程师沟通,为了能提高工作效率,这两天抽空读了《Nginx高性能Web服务器实战教程》。

一、Nginx

Nginx是一款高性能的Web服务器软件,主要用于提供网上信息浏览服务,为高并发网站的应用场景而设计,可以在Linux、macOS和Windows等操作系统中运行,它的优点包括性能高、稳定性好、结构模块化、配置简单以及资源消耗非常低等。拥有HTTPS访问、gzip压缩、虚拟主机和URL重写等功能,不但可以搭配FastCGI程序处理动态请求,还可以用于代理、反向代理、负载均衡和缓存服务器等功能。P2

1)进程和访问控制

Nginx由一个主进程和多个工作进程组成,主进程接收客户端请求,再转交给工作进程处理,从而很好地利用多核心CPU的计算能力。P89

Nginx的访问控制是网络安全防范和保护的主要策略,其任务是保证网络资源不被非法访问。P93

2)日志记录功能

Nginx提供了一个非常灵活的日志记录功能,它可以使每个块的配置拥有各自独立的日志进行记录,并且根据记录内容的不同又分为访问日志和错误日志。P101

(1)访问日志用于记录客户端访问Nginx的每一个请求。记录用户的IP、访问时间、请求方式、响应状态、地域来源、跳转来源、使用终端等信息。

(2)错误日志记录在访问Nginx时出错的记录,可以查看某个服务的性能瓶颈。

3)虚拟主机技术

虚拟主机技术是指一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一台虚拟主机,每台虚拟主机都可以独立对外提供Web服务,且互不干扰。

利用虚拟主机可把多个不同域名的网站部署在同一台服务器上,而不必再为建立一个网站单独购买一台服务器,既解决了维护难题,又节省了硬件成本。P107

二、PHP与Nginx

对Nginx而言,PHP是一个外部程序,而非其内部的一个模块。为了让Web服务器的功能扩展性更强,就需要支持CGI(Common Interface,公共网关接口)规范。P124

1)CGI

CGI是Web服务器与外部程序之间的接口标准,用于两种不同程序之间的信息传递。CGI规范允许Web服务器根据浏览器请求调用CGI程序,并将其输出结果通过响应发送给浏览器,从而使Web服务器支持处理复杂的网站业务需求。

Web服务器支持CGI的意义不在于性能而在于开发,开发者只需要编写一个CGI文件放在网站目录中,当浏览器请求CGI文件,Web服务器就会调用CGI程序执行CGI文件,等待CGI程序处理完成后,再将程序的输出结果返回给浏览器。

2)FastCGI和PHP-FPM

FastCGI主要用于解决CGI性能上的缺陷。传统CGI方式是每当客户端请求CGI时,Web服务器就通过操作系统创建一个新的CGI进程,一个CGI进程完成一个请求处理后就退出,下次请求再创建一个新CGI进程。由于这种方式需要不断为每个请求创建进程,因此在网站并发量很大时显得非常低效。FastCGI优化了这种工作方式,它由一个常驻的CGI进程管理器,通过管理一个进程池来处理Web服务器的请求,由此提高了性能。

PHP提供的PHP-FPM(FastCGI Process Manager)就是一个FastCGI进程管理器,其可执行文件位于PHP安装的目录中。

三、负载均衡与缓存

1)正向代理

代理也称为正向代理,是一个位于客户端和目标服务器之间的代理服务器,客户端将发送的请求和指定的目标服务器提交给代理服务器,然后代理服务器向目标服务器发起请求,并将获得的响应结果返回给客户端。P158

2)反向代理

反向代理对于客户端而言就是目标服务器,客户端反向代理服务器发送请求后,反向代理服务器将该请求转发给内部网络上的后端服务器,并从后端服务器上得到的响应结果返回给客户端。

两种代理的特性有:安全性和功能性。

3)负载均衡

负载均衡(load balance)就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。P162

目前负载均衡有4种典型的配置方式,分别为轮询、权重、ip_hash和利用第三方模块的方式。

4)Web缓存方式

利用反向代理服务器对访问频率较多的内容进行缓存,有利于节省后端服务器的资源。Nginx提供了两种Web缓存方式:永久性缓存和临时性缓存。P168

永久性缓存:将内容源服务器响应的内容缓存到本地,若不手动删除,该缓存文件会一直生效。

临时性缓存:采用md5算法将请求连接进行哈希后,根据具体配置生成缓存文件目录,保存响应的数据。

Web缓存服务器位于内容源Web服务器和客户端之间,当客户端用户访问一个URL时,Web缓存服务器就会请求相应的内容源Web服务器,并将响应的信息缓存至内存或磁盘;然后,当下一个请求到来时,如果访问的是相同URL,Web缓存服务器会直接将已缓存的内容输出给客户端,而不用再次向内容源Web服务器发送请求。

四、模块配置应用

由于Nginx的高度模块化设计,使得每个模块的功能相对简单,便于实现功能的扩展性。P182

1)模块化结构设计

模块化结构设计就是以功能块为单位进行程序设计,实现其求解算法的一种方法。模块化结构设计的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化,方便团队协作以及应用的扩展升级。

换句话说,Nginx就像是积木搭建的房子,在实现规范接口的前提下,各个团队只要保持接口不变,可同时开发功能模块,这样就可以根据实际需求不断地加入新的功能,或者去掉旧的功能,达到应用程序的高配置性、高扩展性、高定制性和高伸缩性。

Nginx分为5大模块:核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块和第三方模块。

2)gzip

gzip(GNU-ZIP)是一种压缩技术,经过gzip压缩后,页面大小可以变为原来的30%甚至更小。gzip网页压缩的实现需要浏览器和服务器的支持。P195

gzip的压缩过程:首先在服务器端压缩,然后传到浏览器端后解压。当浏览器支持gzip解压时,会在请求消息头中包含Accpet-Encoding:gzip,这样Nginx就会向浏览器发送经过gzip后的内容,同时在响应消息头中加入Content-Encoding:gzip,声明这是gzip后的内容,告知浏览器要先解压后才能解析输出。

3)重写与重定向

为了能够在修改网站结构或域名后,避免造成网站中的链接或在其他网站中的外链失效,以及提高该网站在搜索引擎的收录量和排名等目的。通常会采用URL重写与重定向,在增强网站专业化的同时,为用户提供更加舒适的使用体验。P198

下面第6行通过if指令判断访问不到用户请求或目录时,执行第7行指令,^/.*用于匹配当前网络下的所有请求,/default/default.html用于替换符合指定规则的请求。

下面第5行利用set指令为变量$name赋值,$1表示符合正则表达式第一个子模式的值。第6行用于在用户请求“http://test.ng.test/img-数字.jpg”时,重定向到“http://test.ng.test/img/数字.jpg”。

认识Nginx,理解原理和功能的更多相关文章

  1. Nginx工作原理和优化

    转自:http://blog.csdn.net/hguisu/article/details/8930668 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过 ...

  2. Nginx 工作原理和优化、漏洞

    1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...

  3. Nginx工作原理和优化、漏洞(转)

    查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...

  4. 使用NGINX+LUA实现WAF功能 和nginx 防盗链

    使用NGINX+LUA实现WAF功能 一.了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: WAF) ...

  5. nginx 工作原理总结

    1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...

  6. Nginx实战部署常用功能演示(超详细版),绝对给力~~~

    前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...

  7. Nginx的一些基本功能极速入门

    本文主要介绍一些Nginx的最基本功能以及简单配置,但不包括Nginx的安装部署以及实现原理. 1.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片 ...

  8. 转:Apache和Nginx运行原理解析

    Web服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务. 应用层使用HTTP协议. HTML文档格式. 浏览器统一资源定位器(URL). Web服 ...

  9. Nginx工作原理

    Nginx的模块 Nginx由内核和模块组成. Nginx的模块从结构上分为核心模块.基础模块和第三方模块: 核心模块:HTTP模块.EVENT模块和MAIL模块 基础模块:HTTP Access模块 ...

随机推荐

  1. AUTEL MaxiSys MS908S Pro MS908SP Diagnostic Platform

    AUTEL MaxiSys MS908S Pro Description : One of the MaxiSys series devices, the MS908S Pro Diagnostic ...

  2. docker安装radis

    sudo docker search redis sudo docker pull redis sudo docker run --name redis6379 -p 6379:6379 -v /op ...

  3. SQL中GROUP BY语句与HAVING语句的使用

    GROUP BY语句,经过研究和练习,终于明白如何使用了,在此记录一下同时添加了一个自己举的小例子,通过写这篇文章来加深下自己学习的效果,还能和大家分享下,同时也方便以后查阅,一举多得 一.GROUP ...

  4. HQL数据查询基础

    HQL定义 1.Hibernate Query Language, Hibernate查询语言 2.HQL是面向对象的查询语言(HQL查询的主体是映射配置的持久化类及其属性而SQL查询主体是数据库表) ...

  5. javascript 跨域 的几种方法

      1.jsonp方法 转:https://blog.csdn.net/liusaint1992/article/details/50959571 主要实现功能: 1.参数拼装. 2.给每个回调函数唯 ...

  6. LOJ-10102(求A到B之间的割点)

    题目链接:传送门 思路:求A到B之间必要的中间节点 条件:(1)只有一条路径经过中间节点:(low[B]>=num[u]&&num[v]<=num[B],没有从B到u的路径 ...

  7. STARTTLS is required but host does not support STARTTLS

    Spring boot 邮件系统的错误,需要修改配置的文件yml.如果是企业邮箱的话就需要进行这个配置: spring: mail: host: mail.ccds.com username: inf ...

  8. Java面试题4

    一.JAVA基础篇-概念1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机(A ...

  9. wx:for类表渲染

    列表渲染 wx:for 在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件. 默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item < ...

  10. Python之路(一)-python简介

    一.python简介,python2.x与python3.x的区别 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Py ...