Nginx(一):Nginx原理概述 与 安装步骤详解

Nginx(一):Nginx原理概述 与 安装步骤详解

 

相关阅读:

Nginx(一):Nginx原理概述 与 安装步骤详解

Nginx(二):反向代理原理 与 配置文件详解

Nginx(三):负载均衡策略 与 Nginx静态服务器

Nginx(四):Nginx配置实战


 

一、Nginx概述:

本部分参考文章:https://blog.csdn.net/watson2016/article/details/77938678/

1、什么是Nginx:

Nginx是一个高性能的HTTP和反向代理、负载均衡服务器,也是一个IMAP/POP3/SMTP服务器。

2、为什么要用Nginx?

(1)跨平台、配置简单;

(2)非阻塞、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发;

(3)内存消耗小:开启10个nginx才占150M内存,Nginx采取了分阶段资源分配技术;

(4)nginx处理静态文件好,耗费内存少;

(5)内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。

(6)节省宽带:支持GZIP压缩,可以添加浏览器本地缓存;

(7)稳定性高:宕机的概率非常小

(7)master/worker结构:一个master进程,生成一个或者多个worker进程。

(8)接收用户请求是异步的:浏览器将请求发送到nginx服务器,它先将用户请求全部接收下来,再一次性发送给后端web服务器,极大减轻了web服务器的压力;

(9)一边接收web服务器的返回数据,一边发送给浏览器客户端;

(10)网络依赖性比较低,只要ping通就可以负载均衡;

(11)可以有多台nginx服务器;

(12)事件驱动:通信机制采用epoll模型。

3、Master和Worker进程的作用:

master/worker结构:一个master进程,生成一个或者多个worker进程;master对worker进程采用信号进行控制

Master进程:读取及评估配置和维持;Worker进程:处理请求。

4、Nginx是如何处理一个请求的呢?

(1)首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址;然后在nginx的master进程里面,先初始化好这个监控的socket,再进行listen;然后再fork出多个子进程出来,  子进程会竞争accept新的连接。

(2)此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后;

(3)此时,某一个子进程会accept成功,然后Nginx创建对连接的封装,即ngx_connection_t结构体。接着,根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换。

(4)最后,nginx或客户端来主动关掉连接,到此,一个连接就完成了。

5、Nginx为什么不使用多线程?为什么性能这么高?nginx是如何实现高并发的?

(1)例如Apache服务器的工作原理,创建多个进程或线程,而每个进程或线程都会为其分配cpu和内存,但是并发过大会榨干服务器资源。由于web server的工作性质决定了每个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即webserver刚好属于网络io密集型应用,不算是计算密集型。

(2)所以Nginx,采用单线程异步非阻塞处理请求,运用epoll模型,提供了一个队列,排队解决,不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。

(3)Nginx会有一个master主进程,一个master对应多个worker工作进程,每个worker工作进程可以处理多个请求,每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到可能发生阻塞的地方,比如向后端服务器转发request,并等待请求返回。那么,这个处理的worker继续处理其他请求,而一旦后端服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。

6、动态资源、静态资源分离:

动态资源、静态资源分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

7、为什么要做动、静分离?

在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件);这些不需要经过后台处理的文件称为静态文件,否则为动态文件。

有人说后台忽略静态文件不就完了吗?当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决。动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,减少对后台应用访问,减低后台服务器的压力。

这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中。

8、内存池的设计:

为了减少避免出现内存碎片、减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx采用了简单的内存池(统一申请,统一释放)。比如为每个http请求分配一个内存池,请求结束时销毁整个内存池。

 

 

二、Nginx的安装:

1、在windows上安装:

(1)官方网站下载地址:https://nginx.org/en/download.html

如下图所示,下载对应的版本的nginx压缩包,解压到自己电脑上存放软件的文件夹中即可:

Nginx(一):Nginx原理概述 与 安装步骤详解

(2)解压完成后,文件目录结构如下:

Nginx(一):Nginx原理概述 与 安装步骤详解

(3)启动nginx:

①直接双击该目录下的nginx.exe,即可启动nginx服务器

②命令行计入该文件夹,执行nginx命令,也会直接启动nginx服务器

D:/resp_application/nginx-1.13.5> nginx

(4)访问nginx:

打开浏览器,输入地址:http://localhost,访问页面,出现如下页面表示访问成功:

Nginx(一):Nginx原理概述 与 安装步骤详解

(5)停止nginx:

命令行进入nginx根目录,执行如下命令,停止服务器:

# 强制停止nginx服务器,如果有未处理的数据,丢弃

D:/resp_application/nginx-1.13.5> nginx -s stop

# 优雅的停止nginx服务器,如果有未处理的数据,等待处理完成之后停止

D:/resp_application/nginx-1.13.5> nginx -s quit

 

2、在Centos上安装:

(1)安装模块依赖性:

gcc:安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境。

gzip模块需要zlib库:zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

rewrite模块需要pcre库:PCRE是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

ssl功能需要openssl库:openssl是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

安装预备软件的命令:

yum -y –noplugins install wget zip
yum -y –noplugins install unzip
yum -y –noplugins install make
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y openssl openssl-deve

(2)下载与编译安装nginx:

直接下载.tar.gz安装包:地址:https://nginx.org/en/download.html

使用wget命令下载:

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

解压:

tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1

(3)配置:

①默认配置:

./configure

②自定义配置:

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

prefix是nginx的安装目录路径。临时文件目录为/var/temp/nginx,需要在/var下创建temp及nginx目录。

(4)编译安装:

make
make install

(5)启动、停止、重新加载配置文件:

cd /usr/local/nginx/sbin
./nginx   //启动
./nginx -s stop   //快速停止,强制kill进程
./nginx -s quit   //完整停止,待nginx进程处理完任务后进行停止
./nginx -s reload   //重新加载配置文件

(7)测试:

安装启动成功后,访问虚拟机上的nginx,可以看到”Welcome to nginx!”的界面:

 

3、在Ubuntu上安装:

(1)按照正常软件的安装方式,直接通过如下命令进行安装:

$ sudo apt-get install nginx

安装完成即可,在/usr/sbin/目录下是nginx命令所在目录,在/etc/nginx/目录下是nginx所有的配置文件,用于配置nginx服务器以及负载均衡等信息。

(2)查看nginx进程是否启动:

$ ps -ef|grep nginx

nginx会自动根据当前主机的CPU的内核数目创建对应的进程数量(当前ubuntu主机是2核4线程配置)

Nginx(一):Nginx原理概述 与 安装步骤详解

备注:这里启动的服务进程其实是4个进程,因为nginx进程在启动的时候,会附带一个守护进程,用于保护正式进程不被异常终止;如果守护进程一旦返现nginx继承被终止了,会自动重启该进程。

守护进程一般会称为master进程,业务进程被称为worker进程

(3)启动nginx服务器命令:

$ nginx

Nginx(一):Nginx原理概述 与 安装步骤详解

(4)停止nginx服务命令:

和windows系统执行过程一样,两种停止方式

$ nginx -s stop

$ nginx -s quit

(5)重新启动加载:

同样也可以使用命令reopen和reload来重新启动nginx或者重新加载配合着文件。

 

4、在mac os上安装:

直接通过brew进行nginx的安装,或者下载tar.gz压缩包都是可以的。

直接通过brew进行安装:

brew install nginx

安装完成后,后续的命令操作,服务器的启动、进程查看、服务器的停止、服务器的重启已经文件加载命令都是一致的。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114750.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 学计算机我后悔了(计算机专业初级书籍)

    大家好,我是小林哥。平日里,大家都喊程序员加班多很辛苦,动不动就掉头发,但干的还是很香的,毕竟大多数公司钱还是给的很到位的,今年毕业应届生的我见到好多动不动就月薪20K~30K的,真让人两眼泪酸酸,当然这离不开他们大学期间的努力。讲真,没什么家庭背景的人,选择当程序员确实是比较好的选择了,原因有二:首先,当今互联网、AI人工智能、大数据等都是高速发展的行业,自然人才需求很多,薪资也相对其他传统行业高;第二,纯粹看你技术能力,只要自己愿意付出努力,技术能力肯定会慢慢提高上来,而且现在比起几十年

    2022年4月18日
    93
  • 面向对象——三大基本特征

    面向对象的三大基本特征:封装、继承和多态一、封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。优点:减少耦合:可以独立地开发、测试、优化、使用、理解和修改 减轻维护的负担:可以更容易…

    2022年4月15日
    32
  • hashmap和hashtable的区别,说法错误的是_javamap的用法

    hashmap和hashtable的区别,说法错误的是_javamap的用法HashMap和Hashtable的区别一、HashMap简介HashMap是在JDK1.2中引入的Map的实现类。1.HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。2.HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurren…

    2022年9月18日
    0
  • Pandas DataFrame的基本属性详解

    Pandas DataFrame的基本属性详解PandasDataFrame的一些基本属性基本功能列表importpandasaspd导入库df=pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)创建一个DataFramedf.indexdf.columnsdf.axesdf.Tdf.info()…

    2022年5月5日
    281
  • reaver 使用方法和技巧

    reaver 使用方法和技巧reaver非常的不错,为我们ceng网带了最大的方便,使用简单,我来讲一下自己使用心得吧!第一步,如果用虚拟机用vmware的,总会出现鼠标不灵点不到地方,换了一个6.0.2build-59824版本后,鼠标变的非常的好用。但是自己还是想用新版,所以在网上看到说是选择linux系统就可以,自己就打开–编辑虚拟机设置—选项—虚拟名称—linux—ubuntu,试了一下鼠

    2022年5月4日
    74
  • 局域网,园区网,广域网的区别是什么_局域网和互联网的区别与联系

    局域网,园区网,广域网的区别是什么_局域网和互联网的区别与联系局域网局域网LAN(LocalAreaNetwork):一般不大于10公里,而且通常只使用一种传输介质;地域上看局域网通常是用在一座建筑物或一个工厂内,使用上通常是某一单位或某一部门使用,规模上一般不超过几百个用户。(局域网也是相对而言,一栋楼可以看作一个局域网,一个国家性对于世界来说也可以看作一个局域网。多个楼栋,组成的局域网就可以看作一个园区网。)城域网MAN(MetropolitanAreaNetwork):城域网是一种比局域网更大的网,通常覆盖一个城市,从几十公里到100公里不等,可能

    2022年8月31日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号