目录
nginx简介
nginx(2002年开发,2004年10才出现第一个版本0.1.0)他是一款web服务器,市场份额排在第二位,Apache(1995)位居第一位(因为Apache出现的比较早的缘故);
-
功能:web服务器是nginx的一个主要功能,他还支持反向代理(将自身数据发送出去,让别的计算机处理)、负载均衡、邮件代理
-
它的优势:运行时需要的系统资源比较少,所以经常被称呼为轻量级服务器;
-
nginx是一个俄罗斯人(Igor Sysoev),使用C语言(不是c++)开发的,并且开源了! ! ! !
-
nginx号称并发处理百万级别的TCP连接,非常稳定,热部署(运行的时候能升级),具有高度模块化设计(每个模块之间耦合度都比较低),自由许可证(有了自由许可证就表示每一个人都可以直接改他的源代码,并发布出来)。举例:很多人开发自己的模块来增强nginx,第三方业务模块(c++开发); 使用OpenRest开发;
-
nginx不仅可以在linux平台运行也可以在windows平台运行,当然在不同的平台运行代码也不是一样的(不同平台不同代码),当然这种方式会让nginx的性能推向极致,因为有的效率极其之高的代码是会基于平台的,如果想在linux上平台实现高并发就得使用linux的epoll技术(支持大规模高并发必用),而windows上使用的高并发技术就是ICOP技术,我们主要的学习是epoll技术
注意:对于web服务器没有概念的同学这里博主会介绍一下什么是web服务器,比如我们想访问一个网站输入www.baidu.com
电脑回车一按迅速会来到该页面,网站会显示一些图片以及文字,这些图片和文字是web服务器传送给我们的
简单介绍上述过程,当我们打开网站后输入网址,浏览器会将数据包通过网络发送到百度的服务器,而百度的服务器上正好就搭载了nginx的web服务器,nignx会根据你发送的数据包,回应你并显示相关的图片、文字,这就是web服务器的能力
为什么选择nginx
-
单机10万并发(10万个人能够同时链接),而且同时能够保持高效的服务(10万个链接同时来都能够得到快速的回应),epoll这种高并发技术好处就是:高并发只是占用更多内存就能做到(可以理解为空间换时间)
-
在nginx当中会有内存池,进程池,线程池,事件驱动等等许多概念 ,这些都是属于咱们编程中的一些常用技巧,实际上来讲学习和研究大师级的人写的代码,是一个程序开发人员能够急速进步的最佳途径。
-
说说nginx的重要性,有的公司会要求招聘的人员拥有nginx的功底(能够驾驭nginx进行二次开发的人才),因为公司需要基于nginx上实现自家公司的第三方模块,所以学习nginx会对我们找工作提供极大的便利。
安装nginx,搭建web服务器
- 安装前提之一: nginx在linux平台采用的是epoll技术,epoll技术对linux内核版本有一个要求就是linux的内核版本必须是在2.6以上,更早的内核版本不支持,显然博主是支持的
- 安装编译器:我们需要通过编译的手段来安装nginx,他是用c语言实现的开发,所以还需要安装c语言的编译器,如果需要编译一些第三方库我们还得需要C++编译器,所以需要下载gcc 、g++。
yum install gcc-c++
安装库
- 安装pcre库:函数库;支持解析正则表达式。
- zlib库:压缩解压缩功能,将压缩完的数据经过网络传输会减少带宽,但是压缩和解压的该过程会消耗cpu
- openssl库:ssl功能相关库,用于网站加密通讯
读者需要自行前去安装:nginx安装
nginx源码下载以及目录结构简单认识
进入 nginx官网
nginx的几种版本
-
mainline版本:版本号中间数字一般为奇数。更新快,一个月内就会发布一个新版本,最新功能,bug修复等,稳定性差一点;
-
stable版本:稳定版,版本号中间数字一般为偶数。经过了长时间的测试,比较稳定,商业化环境中用这种版本;这种版本发布周期比较长,几个月;
-
Legacy版本:遗产,遗留版本,以往的老版本;
安装,现在有这种二进制版本:通过命令行直接安装;
灵活:要通过编译 nginx源码手段才能把第三方模块弄进来;通过CHANGES查看nginx源码的改动
相关的改动都会记录在文档中,包含一些bug的修复
安装nginx和一些库
- 安装,现在有这种二进制版本,通过命令行直接安装但是不够灵活,因为nginx拥有许多的第三方
- 灵活:要通过编译 nginx源码手段才能把第三方模块弄进来。
这里我们选择1.14. 2版本的nginx源码,可以直接点击下载链接下载到windows系统上,在用xshell拖拽到你的虚拟机上
安装完后解压缩
tar -xzvf nginx-1.14.2.tar.gz
nginx这个目录中的文件
-
auto目录:存放一些编译相关的脚本文件,是能够被系统执行的
介绍一下auto中目录:
cc / : 检查编译器的脚本
lib / : 检查依赖库的脚本
os / : 检查操作系统类型的脚本
type / : 检查平台类型的脚本 -
configure:他是一个普通文件作用是配置nginx的一些配置选项,他运行的时候会产生一些中间文件,后续的nginx编译会用到这些文件,他执行的时候是会用到auto目录中的一些脚本
-
CHANGES : 修复的bug,新增加的功能说明,CHANGES.ru 是 俄语版的CHANGES,可能是因为nginx的开发者是俄罗斯人吧
-
conf / : 默认的配置文件
-
contrib / : 脚本和工具,典型的是vim高亮工具
可以使用该命令覆盖掉之前的vim配置cp -r contrib/vim ~/.vim
-
html / : 欢迎界面和错误界面相关的html文件
-
man / : nginx帮助文件目录,可以使用
man ./nginx.8
查看该帮助文档
nginx核心部分
src / : nginx源码目录
core : 核心代码
event : event(事件)模块相关代码
http : http(web服务)模块相关代码
mail : 邮件模块相关代码
os : 操作系统相关代码
stream : 流处理相关代码
objs/:执行了configure生成的中间文件目录(以 . o 为结束 )
ngx_modules.c:内容决定了我们一会编译nginx的时候有哪些模块会被编译到nginx里边来。
Makefile:执行了configure脚本产生的编译规则文件,执行make命令时用到
nginx的编译和安装
我们先来看看configure 中都是些啥吧
- prefix:指定最终安装到的目录:默认值 /usr/local/nginx
- sbin-path:用来指定可执行文件目录:默认的是 sbin/ nginx
- conf-path:用来指定配置文件目录:默认的是 conf/nginx.conf
注意:这种带with的表示的是默认不编译进nginx,without是默认编译进nginx的
编译的第一步:用configure来进行编译之前的配置工作,./configure
当编译完了之后我们的nginx目录下又新增了obj目录
-
objs/:执行了configure生成的中间文件目录
ngx_modules.c:内容决定了我们一会编译nginx的时候有哪些模块会被编译到nginx里边来。
Makefile:执行了configure脚本产生的编译规则文件,执行make命令时用到 -
用make来编译,生成了可执行文件
记住必须在该目录下nginx-1.14.2使用make
而下面的这个绿色的就是我们编译出来的nginx服务器,他是一个可执行文件
**最后用make命令安装, 必须在nginx-1.14.2目录下使用该命令sudo make install
**
安装之前/usr/local目录下并没有nginx
安装之后/usr/local目录下有了nginx目录
启动nginx可执行程序sudo ./nginx
启动nginx程序
验证nginx是否已经启动
在浏览器输入linux的ip地址(博主用的是云服务器,填的是公网ip)
输入网址后回车一按,浏览器会将数据包通过网络发送到nginx的服务器上,最后nginx服务器接受到数据包并做出反应,显示对应的图片和文字
我们来简单分析一下nginx这个web服务器执行的过程,先看现象,当我们的nginx相关进程执行起来之后,我们的/usr/local/nginx
目录下会多出html这个临时目录,而这个目录下是有index.html这个文件的,实际上nginx会到/usr/local/nginx/html
这里目录中找到对应的index.html
文件,再将index.html文件中的内容全部发送到浏览器来,浏览器会将发送的内容经过解析最终显示出 Welcome to nginx !
出来
当我们查看cat html/index.html
和查看网页的前端html代码发现是一模一样的
我们需要梳理这个过程:当我们在浏览器中输入完ip地址后回车,浏览器会使用http协议通过网络发送数据包给正在监听80端口的nginx服务器,web服务器接受数据包并做出回应(显示图片和文字)