linux网络通讯架构实战篇【01、nginx安装以及介绍】

请添加图片描述

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
pa
启动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服务器接受数据包并做出回应(显示图片和文字)
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这是一门linux下c++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++在linux下从事网络通讯领域/网络服务器的开发和架构工作。这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能:(1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux;(2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪;在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端;本项目用到的主要开发技术和特色包括:(1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】;(2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果;(3)线程之间的同步技术包括互斥量,信号量等等;(4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;(5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程;(6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱生活,爱代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值