nginx简介

1,Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

优点

1,Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型

2,Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
无缓存的反向代理加速,简单的负载均衡和容错。
FastCGI,简单的负载均衡和容错。
模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。

web请求处理机制

1、多进程方式:服务器每接受到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求
2、多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定

同步和异步、阻塞与非阻塞:
1、同步与异步:主要是针对应用程序与内核的交互方式而言的:
同步:进程发出数据后,等内核返回响应以后才继续下一个请求,即如果内核一直不返回数据,那么进程就一直等,直到天荒地老,死机error。
异步:进程发出数据后,不等内核返回响应,接着处理下一个请求,Nginx是异步的
2.阻塞与非阻塞
可以理解为内核与IO设备的交互方式,当内核收到进程请求IO数据时候的处理方式
也可以简单理解为内核需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞
阻塞:IO调用不能立即返回结果,即一个进程发起的IO请求不能得到立即满足时,进程就要一直等到内核响应,内核要把数据从IO设备复制到内核空间,再返回给进程,这是阻塞。
非阻塞:IO调用可以立即返回结果,一个进程发起的IO进程不能立即满足时,不在等待,而是一遍一遍的轮训查看IO是否完成
I/O多路复用
如果一个I/O流进来,我们就开启一个进程处理这个I/O流。那么假设现在有一百万个I/O流进来,那我们就需要开启一百万个进程一一对应处理这些I/O流(——这就是传统意义下的多进程并发处理)。思考一下,一百万个进程,你的CPU占有率会多高,这个实现方式及其的不合理。所以人们提出了I/O多路复用这个模型,一个线程,通过记录I/O流的状态来同时管理多个I/O,可以提高服务器的吞吐能力
水平触发 如果你一直不去读写,它会一直通知你
边沿触发 它只会通知你一次

“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如websphere、tomcat和各种数据库等

nginx的安装

1,nginx的官网可以下载最新的安装包 nginx-1.16.0.tar.gz

1,tar  zxf  nginx-1.16.0.tar.gz  #解压
1)auto目录:里面有4个子目录,cc是编译使用的,os是判断操作系统类型的,其他都是辅助configure编译的,也就是操作系统有什么特性供nginx使用

2)CHANGES:各版本的改变,bug修复等信息
  CHANGES.ru:nginx作者是俄罗斯人,这是俄罗斯版本

3)conf: 为了方便运维配置,conf目录里有示例文件,安装好后会拷贝到安装目录

4)configure:

5)contrib:提供nginx语法检测字体
   cp -r contrib/vim/* ~/.vim	##家目录下如果没有.vim目录,手动新建

6)html:默认发布目录,50x.html是报500错误时的页面

7) src:源码目录

8) 编译完成后会生成一个中间目录objs,里面有个ngx_modules.c,表示编译进nginx的模块,可以打开看一下

9)make完成后再看objs目录,又有新文件


2,mkdir ~/.vim   #vim目录
3,cp -r  ~/nginx-1.16.1/contrib/vim/* ~/.vim  #编写配置文件会有颜色,自动检测语法是否有错误
4,./configure --prefix=/usr/local/nginx  #源码编译,并且指定路径
5,yum  install -y gcc  zlib-devel pcre-devel  #解决依赖性安装,安装需要的依赖软件
6,amke &&  make install   #安装

注意事项

cd nginx-1.16.0/
vim auto/cc/gcc  #注释debug   关闭debug日志     因为编译和安装的过程中会产生大量的日志
vim  src/core/nginx.h   #让别人访问时看不到nginx的版本信息 删除"nginx/"后面的单词
./configure --prefix=/usr/local/nginx  #重新进行编译
 
vim  /usr/local/nginx/conf
#user  nginx   nginx;
#workr——processes 2;
cd /usr/local/nginx/bin/
./nginx  -t #检测配置是否正确,会报错以为我们没有nginx用户,先创建用户
useradd  -s /sbin/nologin   -M  nginx  #创建用户,
./nginx  -t  #再次检测服务正常