NGINX
nginx介绍:Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 服务,也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
创始人:伊戈尔.塞索耶夫
Nginx优点:nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:参考环境来讲:
1)单机环境下参考服务器配置,并发连接数在7000+~8000左右。集群模式20000+。
2)作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应。
3)作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
4)作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
5)Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
3. IO多路复用
I/O multiplexing(多并发):multiplexing指的是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流。发明它的原因是尽量多的提高服务器的吞吐能力。
第一种方法是最传统的多进程并发模型(每进来一个新的I/O流会分配一个新的进程管理。)
第二种方法是I/O多路复用(单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流)
当请求来的时候,nginx使用epoll接受请求的过程:ngnix会有很多连接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。
Epoll:是I/O多路复用最新的实现,修复了select/poll的大部分问题。
Epoll特点:epoll线程是安全的。epoll告诉你具体哪个sock有数据,你不用自己去找了。
异步非阻塞
1个master进程,2个work进程
每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理
到可能发生阻塞的地方,比如向后端服务器转发request,并等待请求返回。那么,这个处理
的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,
我再接着干”。于是他就休息去了。这就是异步。此时,如果再有request 进来,他就可以很快再按这种
方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了,就会触发这个事件,worker才会来
接手,这个request才会接着往下走。这就是异步回调。
安装部署
NGINX部署-yum安装访问nginx的官方网站:http://www.nginx.org/
配置Yum源的官网:http://nginx.org/en/linux_packages.html
在/etc/yum.repos.d文件夹下创建nginx.repo库,在库中添加文件如下:[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
然后直接yum安装即可
Nginx-v 查看版本号
Nginx-V 查看配置信息及版本号
Systemctlstartnginx启动nginx
Systemctlenable ngixn 开机启动
编译安装:(好处:可以自定义配置文件。)安装插件:编译环境(gcc ,gcc-c++)pcre软件包使nginx支持http ,rewrite模块(pcre ,pcre-devel)openssl-devel使nginx支持ssl协议(openssl ,openssl-devel)zlib库(zlib ,zlib-devel)
Yum-yinstall gcc gcc-c++pcrepcre-developensslopenssl-devel zlib zlib-devel
创建一个用于nginx登陆的用户
Useradd nginx
Passwdnginx
Usermod-s/sbin/nologinnginx 以nginx作为启动用户为了安全不允许ssh远程登录。
安装nginx :wget 下载压缩包
解压到/usr/local/: tar xzf nginx-1.16.0.tar.gz -C /usr/local/
cd /usr/local/nginx-1.16.0/
安装nginx: ./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream
进行编译: make && make install
检测配置文件是否正确: /usr/local/nginx/sbin/nginx -t
mkdir-p /tmp/nginx (可能会出现缺失这个文件的情况创建即可)
mkdir/usr/local/nginx/logs(创建日志文件)
启动ngixn服务: /usr/local/nginx/sbin/nginx
通过命令控制nginx:
添加权限:chmod+x /etc/init.d/nginx
重新加载系统启动文件:systemctl daemon-reload
启动并设置开机启动:systemctl start nginx
NGINX 编译参数详解:
修改配置文件:/etc/nginx/nginx.conf
nginx.conf的组成:nginx.conf一共由三部分组成,分别为:全局块、events块、http块。在http块中又包含http全局块、多个server块。每个server块中又包含server全局块以及多个location块。在统一配置块中嵌套的配置快,各个之间不存在次序关系。