Nginx概念
这篇文章只是单纯的介绍nginx以及一些相关概念,有的概念在实际应用中不会用到,不理解也没有关系,这不影响我们学习nginx。
Nginx是什么
如果你知道http协议和httpd是什么,那你就会容易理解nginx是什么了,所以,如果你对httpd还不了解,强烈建议从httpd开始学习,有了httpd的相关基础知识以后,再来了解nginx,就会事办功倍了。
说白了Nginx就是一个HTTP服务器,也可以当做反向代理服务器,可以反代httpd,反代邮件服务器,通过fcgi协议反代动态内容等。
百度百科解释如下:
Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMIP服务器。Nginx是由Lgor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性,丰富的功能集,示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/pop3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序员设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度,京东,新浪,网易,腾讯,淘宝等。
我们可以登录nginx的官网,查看相关信息,官网地址:nginx.org登录后点击下图中的连接即查看官网wiki。
查看官网的wiki,官网自己对NGINX的解释如下:
可以看到,nginx官网自我标榜的配置简单,资源消耗低,而且说明了自己能够解决c10k问题,它使用了事件驱动异步架构模型,所以,消耗小,性能高。
此处我们提到了一个概念:c10k,那么什么是c10k呢。
所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10000 connection(这也是c10k这个名字的由来)。由于硬件成本的大幅度降低和硬件技术的进步,如果一台服务器同时能够服务更多的客户端,那么也就意味着服务每一个客户端的成本大幅度降低,从这个角度来看,c10k问题显得非常有意义。说白了,c10k问题就是并发的问题。
提到c10k问题,就要提到对应的各种IO模型,了解这些IO模型后,会明白c10k问题是怎么得到解决的,但是IO模型这种理论的东西,我们能够使用到的很少,因为理论比较绕,反而会打击我们学习nginx的信心,所以,我们不准备在这里研究他们,我们只要知道 一些相关概念名词即可。
那么下面,我们只是列出一些相关概念,如果现在不能理解这些概念,对学习使用nginx也没有太大的影响,当然我们还是建议先搞定httpd以后,再来研究nginx,在实际使用nginx以后,再回过头来理解这些概念,也是可以的。
首先,我们要明确以下概念
1,所有数据只有在内存中才能使用。
2,内核使用的内存空间与用户进程使用的内存空间是分开的,内核所使用的内存是出于保护模式的,决不允许用户空间的进程直接随意的访问,我们可以称内核使用内存空间为内核空间,而每个用户空间进程又有自己的线性地址空间,也就是说,多个用户进程之间是隔离对的,它们意识不到其他进程的存在,用户进程以为只有它自己本身和内核。
当用户空间的进程需要操作数据时,通过系统调用向内核发起请求,内核需要将数据从硬盘中取得后加载到内核自己的内存空间中,然后将数据从内核内存中拷贝到用户进程对应内存空间中,用户进程才能使用对应的数据,这段话描述的就是一次IO请求的大概过程。
一次IO请求,都会由两阶段组成:
第一步:等待数据,即数据从磁盘到内核内存;
第二步:复制数据,即数据从内核内存到进程内存;
除了上述的大概过程,我们还要了解一些术语,这样方便我们更加详细的理解IO。
阻塞/非阻塞的概念:
阻塞和非阻塞的概念主要反映了调用者(用户进程)在等待结果返回之前所有的状态;
阻塞:blocking,调用结果返回之前,调用者被挂起;
非阻塞:nonblocking,调用结果返回之前,调用者不会挂起;
同步/异步的概念:
同步和异步的概念主要反映了被调用者消息通知机制:
消息通知:
同步:调用者等待被调用者返回消息;
异步:被调用者通过状态通知或回调机制通知调用者,告诉调用者,被调用者的运行状态;
但是上述的“阻塞/非阻塞”和“同步/非同步”的概念往往不会分开说,经常会将他们组合到一起,比如,同步阻塞 或 同步非阻塞。
我们说回到Nginx,官网已经说明Nginx使用的是“事件驱动异步架构的IO模型”,所以,当我们在linux中使用Nginx时,我们要提到事件驱动模型在linux中的实现;epool
linux中,对event-driven(事件驱动模型)的实现称为epoll,所以,如果想让Nginx在Linux中能够愉快地运行,则需要确保linux中存在epoll的系统调用,而这个系统调用存在于libevent包中。
linux中,对event-driven(事件驱动模型)的实现称为epoll,所以,如果想让Nginx在Linux中能够愉快地运行,则需要确保linux中存在epoll的系统调用,而这个系统调用存在于libevent包中。
所以,对应Nginx的关键词为:事件驱动,异步,非阻塞。
Nginx的架构,特性,功能
从下图,可以看出Nginx的架构,功能,特性,当然,看不懂的没关系,下图的大概意思就是nginx能当做web服务器,能做反代,了解即可。
Nginx的程序架构:
master/worker,类似于httpd的eventMPM
一个master进程:
负载加载配置文件,管理worker进程,平滑升级
一个或多个worker进程
处理并响应用户请求
缓存相关的进程:
cache loader:载入缓存对象
cache manager: 管理缓存对象
Nginx的特性:异步,事件驱动,非阻塞
并发请求处理:通过kevent/epoll/select
文件IO:高级IO sendfile, 异步,mmap
nginx高级模块:高级模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载;
早期不支持动态装载卸载模块。近期开始支持DSO(动态装卸载)机制了。使用load_module来加载。
模块分类:
核心模块:core module
标准模块:
Standard HTTP modules
Optional HTTP modules
Mail modules
Stream modules
第三方模块:
3rd party modules
Nginx的功用:
静态的web资源服务器:
结合FastCGI/uwSGI/SCGI等协议反向代理动态资源请求;
http/https协议的反向代理;
imap4/pop3协议的反向代理;
tcp/udp协议的反向代理;
以上就是nginx的相关概念的总结。
Nginx概念的更多相关文章
- Nginx概念及基础安装--详细讲解
1.主要内容: Nginx的基础 特性 配置部署 优化(了解) 2.Nginx 是什么? Nginx是一个开源的,支持高性能,高并发的www ...
- Django+Nginx概念安装和使用–使用Django建立你的第一个网站
一 前记 最近在使用Django倒腾属于自己的网站,由于以前没有接触过多少这类信息,所以,很多东西都是从零开始学习的.在参考网上的资料时候,发现很多对这方面记录的,很多人都写的不是很清楚,也许我这个新 ...
- nginx在linux上的安装与配置详解(一)
Nginx的安装与配置详解 (1)nginx简介 nginx概念: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like ...
- 《nginx源代码解析》系列分享专栏
<nginx源代码解析>系列分享专栏 解析nginx源代码,从main函数开始,一步步解读nginx运行原理,同时进行nginx第三方模块的开发,努力做到知其然,知其所以然 <ngi ...
- Nginx专题(1):Nginx之反向代理及配置
摘要:本文从Nginx的概念出发,分别从反向代理的概念.优势.配置代码3个方面介绍了Nginx的特性之一反向代理. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方 ...
- django项目部署上线 nginx + uwsgi
一.安装python3 安装步骤:https://www.cnblogs.com/zhangqigao/p/11661875.html 二.修改django中的配置文件 修改settings.py ( ...
- Linux运维相关目录
- django项目部署上线
前言 完善的django项目上线,有很多种上线的方法,比如apache, uwsgi, nginx等.这里只介绍2种,一种是django自带的,另外一种则是nginx + uwsgi完成介绍.这里的系 ...
- Django项目在Linux服务器上部署和躺过的坑
引言 在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台.那么问题来了,既然要在服务器上部署, 就需要准备: 1.linux服务器配置 2.linux安装python环境搭建与配置 3. ...
随机推荐
- layui 第三方组件 eleTree 树组件 树形选择器
使用 JS位置 ,layui/lay/modules/eleTree.js:CSS位置 ,layui/css/modules/eleTree/eleTree.css: ## 下面应用即可页面css引用 ...
- jmeter-抓取数据库数据,循环请求1000次(变量嵌套变量)
场景:数据库返回1000个数据,用这1000个数据去做请求 数据库请求结果为: 添加while控制器 添加BeanShell 预处理程序,${__counter(FALSE,Vcount)} 为自增函 ...
- day32 网络编程之粘包问题
1.最大半连接数 什么是最大半连接数 半连接:在进行TCP协议通信时,客户端与服务器端进行三次握手建立连接,但是有时客户端与服务器端进行了连接申请,服务器端也同意了申请(既已经完成三次握手的两次),此 ...
- *【Python】【demo实验30】【练习实例】【使用Turtle实现实时时钟效果】
目的: 使用Turtle实现实时时钟效果 源代码: # encoding=utf-8 # -*- coding: UTF-8 -*- import turtle from datetime impor ...
- Linux系列(11):之bash进阶与数据流导向、管线命令
1.万用字符与特殊字符 在bash的环境下有一个特别有用的功能,那就是万用字符!下面展示常见的万用字符: 1.万用字符 除了万用字符还有一些其他的特殊字符,接下来显示特殊字符. 2.特殊字符 2.数据 ...
- Coloring Edges(有向图环染色)-- Educational Codeforces Round 72 (Rated for Div. 2)
题意:https://codeforc.es/contest/1217/problem/D 给你一个有向图,要求一个循环里不能有相同颜色的边,问你最小要几种颜色染色,怎么染色? 思路: 如果没有环,那 ...
- OVS+Docker
两台机器操作一样就是IP不同但是设置都是相同的: A机器:192.168.71.142 docker0:172.17.42.1 B机器:192.168.71.136 docker0:172.17.43 ...
- 记录 OpenCV 错误
最近在做一个"人脸识别"的项目,我想用OpenCV来分析图片中的人脸. 但是在测试的时候,程序报出“检测到0张脸” 可能的错误原因: 1.教程中OpenCV的版本问题,教程中用的版 ...
- 数值或者电话号码被EXCEL转成了科学计数法,用XSSFCell 如何读取
public static Map<String, Integer> readXls() throws IOException { //用来获取每一个小号重复多次,被多少账号用了.来平均 ...
- 与 QWidget 有关的 Qt 可视化组件的继承关系图
与 QWidget 有关的 Qt 可视化组件的继承关系图