前端工程师在理解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. android 设置LOGO和app名称

    mipmap和drawable目录都可以存放图片,一般情况下,将LOGO文件存放在mipmap目录,普通图片放到drawable目录. 一.在mipmap目录添加LOGO图片 在mipmap目录右键- ...

  2. springboot中使用ContextLoaderListener.getCurrentWebApplicationContext();获取WebApplicationContext为空问题

    WebApplicationContext applicationContext = ContextLoaderListener.getCurrentWebApplicationContext(); ...

  3. 201621123002《Java程序设计》第七周学习总结

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 事件源,事件处理方法,事件监听器 事件源(Event ...

  4. springboot项目新功能开发

    在原有的springboot项目上,复制了一个,然后将其中的src下的所有java文件都删除,gradle下把中间件都删除,直流springframework的,重新启动,发现 错误Failed to ...

  5. 2.在demo bag上运行cartographer ROS

    注意在运行bag包,之前需要去执行source install_isolated/setup.bash 1.Deutsches Museum 下载并启动2D的backpack demo: wget - ...

  6. SAS语言结构

    SAS程序用于访问.管理.分析和展现数据.其基础组成部分是 DATA步和PROC步,PROC步又称为SAS过程.一个SAS程序可包含以 任意顺序组合的多个DATA步和多个PROC步. DATA步通常用 ...

  7. 05 IO和管道

    目录   三种I/O设备 把I/O重定向至文件 使用管道   知识铺垫     1)查看fd-文件描述符 (L)   ll /proc/$$/fd   在Linux中,系统打开文件时会随机分配一个编号 ...

  8. 前端之html概述及基本结构

    html概述: HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言,这种语言由一个个的标 ...

  9. Maven的多mirrors的配置

    repo1 central Human Readable Name for this Mirror. http://repo1.maven.org/maven2/ repo2 central Huma ...

  10. 进度条(progress_bar)

    环境:linux.centos6.5 #include<stdio.h> #include<unistd.h> int main() { ]={'\0'}; char ch[] ...