当前位置:首页 > 教程 > 正文内容

nginx企业级应用(nginx管理平台)

2023-04-25 19:30:05教程1

nginx管理平台

Nginx 跟 Haproxy 其实他们两个的定位是有所不同的,Nginx的定位是一个server,Haproxy的定位是一个load balancer。

Nginx通过各种plugin module可以支持Load balance的功能,而且性能不弱于haproxy太多,所以总有人拿来将两个东西比较。其实Apache也可以通过相关模块做load balancer,只不过性能差得多而已所以没人用而已。当然了Nginx的LB功能现在是其支柱主打功能而已。

看到有很多答案对于haproxy多进程有误解,这里特别说下,haproxy早就支持多进程模型,但是并不是Nginx的Worker Master结构,而是平等多进程结构,同时也支持REUSE PORT选项,所以在这里Nginx跟Haproxy对于多核利用上都是一样的并没有本质区别。

haproxy从1.8之后,添加了多线程的模式,现在它更推荐的也是这个模型,在一些平台上能够更好的利用多核。而Nginx从来没有多线程模型。而且看起来社区也没打算支持。

Nginx其实基于server的功能来说,是Haproxy不具备的,让Haproxy像一个普通Web server那样回复一个普通的HTTP请求是很难的,不大规模修改源码根本做不到。Haproxy是围绕转发模型设计的,整个流程就是围绕如何快速把一个请求或者回复转发到另一端。并不是像Server一样接受请求然后回复。

但是Nginx作为一个纯粹的LB来说,尤其是针对Web LoadBalancer来说,功能没有haproxy那么细致。Haproxy支持的ACL对象非常广泛,很多情况并不需要脚本辅助就可以完成复杂的功能,而Nginx稍微复杂的LoadBalance功能都需要使用脚本才能完成,这样性能就会差很多。

从功能角度上来讲,Nginx其实功能比Haproxy要多(当然并不都是免费的),因为他的开发社区和定位方向都比Haproxy要大和宽泛。在Nginx上面的各种解决方案也要多的多。比如WAF,haproxy一致都没有比较好的原生解决方案。还有包括最近针对Service Mesh的支持,haproxy都是很难跟得上。

但是基础功能,包括HTTP2,TLS 1.3,Script, SSL/TLS offload,ocsp,SNI preload,其实haproxy最新版本早就已经支持,甚至比Nginx还更早些(HTTP2比较晚,但是现在也支持了)。另外,关于硬件SSL offload支持其实主要是OpenSSL的engine的支持,所以这个大家都差不多,只要兼容最新OpenSSL都没什么问题。

Haproxy的优点其实是转发性能稍高,因为haproxy追求zero copy的forward流程,所以代码都倾向于优化在这一点上。但是这个优势现在被广泛的TLS/SSL应用抹平了,对比0 copy节省的时间来说加解密的消耗的性能占绝大多数,所以haproxy基本上在现在的广泛SSL环境下没有什么优势了。除非你想用纯HTTP,而且还想使用比较复杂的基于HTTP头部的Load Balance功能,那么Haproxy是个好选择,否则只是单纯LB的话,LVS性能其实更更高,毕竟人家在Kernel里面。

从代码层面来说,Nginx的结构化代码和模块化都比Haproxy好太多。Haproxy代码模块化一直是个大问题,内部结构模块化不足,二次开发困难,最近到1.9了才有些改善,但是仍然有很多内部trick的hack和让人发懵的FLAG。相比Nginx做到的彻底的模块化,可以轻易的通过开发自己的模块来改变或者实现相关功能,这个haproxy是不具备的。

从开发社区来说,Nginx也比Haproxy好太多,Haproxy虽然社区历史更久,但是一直都是不愠不火,贡献者因为原作者的严格的控制,一直都很少,再加上没有module开发功能,所以吸引的开发者一直都不多。带来的问题就是版本更新慢,支持的新功能慢。HTTP2的开发完全靠原作者一个人,所以支持进度严重拖后。

这篇文章看起来好像是变成了对haproxy吐槽,但是因为在工作中接触这两个东西实在太多,而且是进行深度二次开发,所以自认为还是有一定的了解的。从目前来看,如果haproxy不能更开放招募更多的贡献者,不能彻底修改架构支持module开发,是无法比拟NGINX的。

另外Haproxy优势一点的就是免费版的功能比Nginx免费版的更实惠。对于小又穷的站点的确是个好处。

nginx-gui

home目录在Linux称为主目录,在该目录下面存储的是每个用户的目录。也会是每个用户的数据是存储在该目录下面的一个子目录中。

我们知道Linux是一个多用户的操作系统,也就是在操作系统中可以创建多个用户。通常在创建用户的时候就会在home目录下面自动创建一个同名的子目录,也就是该用户的主目录。而该新建的用户只有对该子目录有全量的读写权限。

总结来说,home目录是存储每个用户的主目录,用户的主目录存储用户独有的数据。

在Linux中每个目录都有其作用,下面我们列出主要目录的具体作用。

/bin – 用户基础二进制文件目录

目录/bin是根目录的一级子目录。在该目录中包含着最为基础的用户二进制文件,也就是应用程序。这个目录非常像Windows下的Programs目录。

并非所有的应用程序都存储在这个目录下面,有些不是特别基础的程序会存储在/usr/bin目录下面。比如Chrome浏览器等,或者用户自己安装的一些程序通常会在/usr/bin下面。而系统应用程序则通常会在该目录下面,比如ls、mkdir和cp等等。

如果你使用的桌面版的操作系统,可以通过GUI看到该目录下的内容。下面这张图是一个具体的例子。

图4 二进制目录

/boot – 静态启动文件

在目录/boot下面包含的文件是用于启动操作系统的文件。比如GRUB boot loader文件和操作系统内核等。但是boot loader的配置文件并没有在这里,而是在/etc目录中。

/cdrom – 光盘安装点

目录/cdrom并不是FHS标准的一部分,但是我们在绝大多数发行版中都可以看到。该目录是光盘的临时挂载点。

/dev – 设备文件

在Linux下面,设备也是一个文件,比如磁盘、优盘或者光盘等。包括无线网卡、摄像头和串口等都是一个文件。而通常这些文件都是在/dev目录下面,大家可以切换到该目录下看看具体的内容。

图5 设备目录

其中图是/dev目录的一个局部截图。在该目录下面最常见的可能就是/dev/sda这种文件,该文件表示一个SCSI磁盘。

处理实体设备外,在该目录下面还有很多伪设备。比如/dev/random表示一个产生随机数的设备,/dev/loop0则是一个将本地文件映射为磁盘的虚拟设备。这些伪设备有的时候非常用于,我们经常使用这些设备做一些测试。

图6 GUI目录

/etc – 配置文件

操作系统和应用程序的配置文件通常都统一存储在一个目录下面,这个目录就是/etc。很多配置文件都已文本文件的形式存储在这里。我们可以通过文本编辑器修改配置项。比如网络的IP地址、Nginx的配置和系统日志的配置等等都可以在这里找到。

/home –主目录

这个目录称为主目录。在Linux操作系统下面通常每个用户都有一个自己的目录,该目录就在/home下面。例如本例中有一个名为zhangsn的用户,该用户的主目录在/home下如图7所示。

用户的主目录下面包含这数据文件和用户相关的配置文件。通常一个用户只能修改其目录下的文件,只有获得授权的情况下才能访问其它文件。

图7 zhangsn的主目录

/lib – 基础共享库

在/lib目录中存储的是/bin和/sbin中二进制文件(应用程序)需要的库文件。在/usr/bin下的应用程序依赖的库通常在/usr/lib目录下面。

/lost+found – 可恢复的文件

每一个文件系统都有一个lost+found目录。如果文件系统崩溃,在系统下次启动的时候会进行数据检查。在检查的过程中如果发现有数据冲突的文件就会将其放入该目录中。这样,你就可以试着手动恢复该文件。

/media – Removable Media

在目录/media下面包含的子目录是一些可插拔设备的挂载点。当一些可插拔设备插入电脑时,在该目录下会自动创建子目录,并进行挂载。

/mnt – 临时挂载点目录

该目录通常是空的。主要用于临时挂载一些外部文件系统。比如有多个数据磁盘的情况下,会将格式化的磁盘挂载到该目录下面。mnt字符是mount的缩写,也就是挂载的意思。

/opt – 自选软件包(Optional Packages)

自行安装的非常规软件通常会安装在该目录。

/proc – Kernel & Process Files

该目录也是一个虚拟目录,也就是并不是存储文件数据的目录。这个目录中存储的文件通常是用来获取操作系统内核内部信息或者进程内部信息的。

图8 proc目录

比如每个进程在该目录下都有一个子目录,而字母的名字就是进程ID。通过cat命令对该目录下的文件进行读取,可以获取进程的详细信息。例如我们进入目录/proc/258下面,这个是进程ID为258的进程的信息,通过ls命令可以看到如下内容。

图8 进程详细信息

/root – root主目录

目录/root是root用户的主目录。root用户的主目录并不是在/home下面,而是在根目录下面。这一点需要注意。

/run – 应用程序状态文件

这个目录是比较新的目录,用于应用程序存储经常变化的文件,比如文件锁、进程ID或者套接字等等。

/sbin – 系统管理二进制文件

该目录与/bin目录类似,用于存储二进制文件。与/bin目录不同的地方是这个目录存储的是用于系统管理的二进制文件,比如磁盘格式化(mkfs)、磁盘分区(fdisk)和网络配置(ifconfig)等命令。

图9 系统命令

/selinux – SELinux虚拟文件系统

如果你的Linux发行版使用SELinux作为安全管理,那么该目录包含着SELinux使用的相关文件。

/srv – 服务数据

该目录存储具体服务提供的数据。通常该目录是空的。这个目录中的数据通常是提供给外部的,比如Web网站存储的用户信息。这里需要注意与/var和/tmp的区别,前者是提供给外部用户的,而两者则是应用自己使用的,而且/tmp中的数据重启后会丢失。

/tmp – 临时文件

应用程序产生的临时数据通常存储在该目录中。该目录有一个特点,就是系统重启后目录中的数据将被清理。

/usr – User Binaries & Read-Only Data

与系统使用的应用程序和文件不同,在/usr目录下存储的是用户使用的应用程序的文件。比如/bin下面存储的系统二进制文件,而/usr/bin下面则是用户使用的二进制文件。/lib下面存储的系统库文件,而/usr/lib下面存储的是用于应用程序使用的库文件。

/var – 变量数据文件

/var目录是/usr目录对应的可写目录,在/usr目录中的内容只读的,而/var则是可写的。日志文件和正常操作中的一些写入操作通常会写入/var目录。例如,日志文件通常存储在/var/log中。

nginx官方

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

应用场景

1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。

3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,

需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,

不会因为某台服务器负载高宕机而某台服务器闲置的情况。

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

nginxs

nginx既可以在windows下运行,也可以下载linux版本进行使用,不过一般建议在linux下使用,linux下性能更好

nginx.org

Nginx代理缓存功能

Nginx缓存主要是用于减轻后端服务器的负载,提高网站并发量,提升用户体验度。

注意:Nginx反向代理的缓存功能是由ngx_http_proxy_module提供,在使用缓存功能时务必要nginx支持该模块。可能有些选项的不支持Nginx的版本,具体看官方文档: nginx.org/en/docs/http/

nginx管理工具

二者区别如下:

Traefik是一个反向代理,负载均衡工具

Nginx也可以做反向代理,但主要做为Web服务器使用

一、Nginx优点:

1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。

2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进

Traefik是一个反向代理器,是一个比较年轻的项目,对容器支持十分友好

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98798213.html