×

symbian3运行ngage

symbian3运行ngage(nginx和apache有什么区别)

admin admin 发表于2022-09-09 02:17:24 浏览87 评论0

抢沙发发表评论

本文目录

nginx和apache有什么区别

两者都可以作为Web服务器,apache发展的比较早,体形臃肿、配置复杂,但是各种解决方案十分完善,nginx是后起之秀,轻量级、高并发、配置十分简单,功能也是很强大,尤其在负载均衡和高并发方面表现突出,市场占有率是越来越高,如果新部署服务器的话,nginx是首选。

CentOS8如何安装Nginx

方式一:yum安装

安装:

yum install nginx

启用并启动Nginx服务:

sudo systemctl enable nginx

sudo systemctl start nginx

sudo systemctl stop nginx

要验证服务是否正在运行,检查其状态:

sudo systemctl status nginx

方式二:自定义目录安装

1.安装工具

yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

# PCRE是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 ./nginx -s reload 重启nginx(不推荐此方法,推荐先停止在启动)

深入浅出Nginx,如何做到高并发下的高效处理如何做到热部署

01前言

Nginx(“engine x“)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

在高连接并发的情况下,Nginx是Apache服务器不错的替代品。由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

上图简单展示了Nginx的部署,Nginx类似网关。

02正向代理与反向代理

正向代理与反向代理有什么区别昵?我们就不废话先,直接上图

这两图这么一整,估计也很难理解清楚那个是正向代理,那个是反向代理。那我现在详细解释一下吧。

正向代理形如1图,我们在aws上申请首次注册送12月的服务器,然后它就是我们的VPN了,然后我们通过它就可以访问YouTube了。不知道大伙能不能明白,正向代理是我们客户端发起的,客户端做出调整。

反向代理形如2图,服务器A,服务器B,服务C部署在内网,我们通过Nginx暴露一个外网地址,小伙伴们就可以访问我们了。

这么讲不知道能不能解释清楚,大伙可以继续看一下下面这个比喻:

正向代理:客户端 《一》 代理 一》服务端

正向代理简单地打个租房的比方:

A(客户端)想租C(服务端)的房子,但是A(客户端)并不认识C(服务端)租不到。B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到这个房子。

这个过程中C(服务端)不认识A(客户端)只认识B(代理)C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。

反向代理:客户端 一》代理 《一》 服务端

反向代理也用一个租房的例子:

A(客户端)想租一个房子,B(代理)就把这个房子租给了他。这时候实际上C(服务端)才是房东。B(代理)是中介把这个房子租给了A(客户端)。

这个过程中A(客户端)并不知道这个房子到底谁才是房东。

03Master-Worker模式

启动Nginx后,其实就是在80端口启动了Socket服务进行监听,如图所示,Nginx涉及Master进程和Worker进程。

1--进程数,建议设置和CPU个数一样或2倍

2--日志级别,默认error级别

3--Nginx 启动后的pid 存放位置

4--配置每个进程的连接数,总的连接数= worker_processes * worker_connections根据物理内存大小来配置,默认1024

Master进程的作用是?

读取并验证配置文件nginx.conf;管理worker进程;

Worker进程的作用是?

每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;注意Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。

由图1可以看到,我这边配了两个worker_processes,所以有两个worker进程。

04如何做到高并发下的高效处理?

上文已经提及Nginx的worker进程个数与CPU绑定、worker进程内部包含一个线程高效回环处理请求,这的确有助于效率,但这是不够的。

作为专业的程序员,我们可以开一下脑洞:BIO/NIO/AIO、异步/同步、阻塞/非阻塞...

要同时处理那么多的请求,要知道,有的请求需要发生IO,可能需要很长时间,如果等着它,就会拖慢worker的处理速度。

Nginx采用了Linux的epoll模型,epoll模型基于事件驱动机制,它可以监控多个事件是否准备完毕,如果OK,那么放入epoll队列中,这个过程是异步的。worker只需要从epoll队列循环处理即可。-symbian3运行ngage


05如何做到热部署?

所谓热部署,就是配置文件nginx.conf修改后,不需要stop Nginx,不需要中断请求,就能让配置文件生效!(nginx -s reload 重新加载|nginx -t检查配置|nginx -s stop 停止nginx)-symbian3运行ngage

通过上文我们已经知道worker进程负责处理具体的请求,那么如果想达到热部署的效果,可以想象:

方案一:

修改配置文件nginx.conf后,主进程master负责推送给woker进程更新配置信息,woker进程收到信息后,更新进程内部的线程信息。(有点valatile的味道)

方案二:

修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。-symbian3运行ngage

Nginx采用的就是方案二来达到热部署的!

模拟一个例子:

首先在本地模拟一个线上需要升级 Nginx 的环境,假设旧版本为 nginx-1.0.15,需要升级到 nginx-1.16.0。

开始之前,先牢记一下以下几个命令:

  • -HUP 平滑启动(相当于reload)

  • -USR2 平滑升级可执行程序,主要用在版本升级

  • -WINCH 从容关闭工作进程

  • -USR1 重新打开日志文件,主要用在日志切割(相当于reopen)

配置旧版本

# 下载 nginx-1.0.15

wget 如果发现问题要紧急回滚呢?

cp -f nginx.old nginx

# 拉起旧版本的worker进程(-HUP 相当于 -s reload)

kill -HUP old_master_pid

# 让新版本的 worker 不再接受请求

kill -USR2 new_master_pid

# 关闭新版本的 woker 进程

kill -WINCH new_master_pid

如果确认无误要退出老版本的 nginx,可以执行命令

kill -QUIT old_master_pid

直接让web服务运行在80端不行吗为什么要用nginx反向代理

其实现在估计很少人会用80端口部署服务了,起码都是443端HTTPS服务了,因为HTTPS相对更安全。

但是这不影响这个问题的解答,下面我以个人的一些看法说明下。

一个服务器只有一个常用的端口

我们都知道你只买了一台公网服务器,默认80端口是HTTP服务,443端口是HTTPS服务。

而现在很多时候,微信、网站搜索引擎,默认都是用这些端口进行正常处理,当你有多个服务要对外开放,你如果A服务已经占用了80端口,那么B服务就不可以再占用80端口。

而你采用Nginx服务直接占用80或者443端口,那么我们根据Nginx的规则配置,就可以设置如下规则:

访问url路径/api 走A服务,访问url路径/admin 走B服务。

Nginx高性能

熟悉Nginx性能的程序员,都知道Nginx的性能之高,这里就不展开说。

因为有些编程语言框架,比如Flask,本身处理web请求就性能不高,通过Nginx可以提前处理web请求,而Flask就可以更多关注业务本身的逻辑。

Nginx负载均衡

当你的web服务后台可以多实例部署,这时候你说的web服务直接运行80端口,那就不能支持多台实例。

而通过nginx,就可以指向两台甚至多台实例的后端服务,而且可以设置策略进行负载请求。

比如负载后端两个web服务,A机器性能配置强,那么我们就可以分配更多的请求到A机器。

B机器性能一般,那么我们就可以减少请求到这台机器。

Nginx安全性

因为有了Nginx服务器在前面进行处理请求,用户根本不知道后端是用什么语言进行处理,减少后端暴露的几率。

不过由于使用Nginx的人很多,Nginx的漏洞也是备受关注,所以要及时关注Nginx的漏洞和最新稳定版本升级。

这里提供一个检测Nginx稳定版本的视频解说: