码迷,mamicode.com
首页 > 系统相关 > 详细

linux-nginx-1

时间:2018-07-04 10:33:56      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:live   个数   open   .com   ast   通信   内存数据   nginx安装   模型   

NGINX
机器环境:web主机192.168.2.18 centos7 测试主机192.168.2.29
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,具有占用内存少,并发能力强等优点。
官网:www.nginx.org
官方文档:http://nginx.org/en/docs/
中文文档:http://tengine.taobao.org/nginx_docs/cn/docs/
二、nginx的功能与特性
1、基本功能及特性
①作为静态资源的web服务器,能缓存打开的文件描述符;
②作为反向代理服务器,可做缓存、负载均衡;
③支持FastCGI
④模块化,非DSO机制(不能动态装卸载),过滤器gzip,SSI和图像大小调整等
⑤支持SSL
2、扩展功能:
①基于名称和IP做虚拟主机
②支持keepalive
③支持平滑配置更新或程序版本升级
④定制访问日志,支持使用日志缓存以提高性能
⑤支持url rewrite
⑥支持路径别名
⑦支持基于IP及用户的认证;
⑧支持速率限制,并发限制等;

三、nginx的进程模型
技术分享图片

◆nginx会运行一个主进程(master)和若干个由其fork出来的工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。连接请求就由为数不多的几个仅包含一个线程的worker进程以高效的回环(run-loop)机制进行处理,这样就不会引起很多的进程/线程上下文切换,从而降低了系统开销。每个线程内部对socket的管理方式是异步非阻塞的,使用epoll事件驱动机制来实现对大量socket描述符的管理,当描述符多的时候也只是会占用较多的内存而已,而不会造成占用大量cpu时间,这就是nginx并发能力强的原因。每个worker可以并行处理数千个的并发连接及请求。
每个worker进程是平等的,当有连接请求进来,交由哪个worker处理呢?master进程在建立需要listen的socket之后,fork出若干个worker进程,所有worker进程会抢互斥锁,抢到的的接受并处理连接请求,返回数据给客户端,最后断开连接,一个请求只在由一个worker处理。
worker数是可以设置的:如果负载以CPU密集型应用为主,如SSL或压缩应用,则worker数应与CPU数相同;如果负载以IO密集型为主,如响应大量内容给客户端,则worker数应该为CPU个数的1.5或2倍。
主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。
主进程主要完成如下工作:
①读取并验正配置信息;
②创建、绑定及关闭套接字;
③启动、终止及维护worker进程的个数;
④无须中止服务而重新配置工作特性;
⑤控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;
⑥重新打开日志文件,实现日志滚动;
⑦编译嵌入式perl脚本;
worker进程主要完成的任务包括:
①接收、传入并处理来自客户端的连接;
②提供反向代理及过滤功能;
③nginx任何能完成的其它任务;
cache loader进程主要完成的任务包括:
①检查缓存存储中的缓存对象;
②使用缓存元数据建立内存数据库;
cache manager进程的主要任务:
①缓存的失效及过期检验;

     四、nginx的模块和工作原理

nginx代码是由内核和一系列的模块组成, nginx内核主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互。不过,大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。
◆nginx模块从结构上分为:
核心模块
http模块
http标准模块
http可选模块
如 http_stub_status_module,http_ssl_module,http_gzip_static_module
邮件模块
第三方扩展模块
◆nginx模块从功能上分为:
handlers:此类模块直接处理请求,并生成内容
filter:此类模块对其它handlers生成的内容进行修改,最后由nginx输出
proxies:此类模块主要与后端服务如fastcgi进行交互,实现服务代理和负载均衡等功能

NGINX 1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。
这里可以参考这篇文章https://www.cnblogs.com/tinywan/p/6965467.html
五、nginx安装
首先要先安装开发环境
yum -y groupinstall "Development Tools" "Server Platform Development"
nginx的rewrite模块和http核心模块会用到PCRE正则表达式语法,所以要安装pcre-devel
yum -y install gcc pcre-devel openssl-devel zlib-devel
我们这里采用yum安装,需要有epel源,配置epel源:
yum install epel-release.noarch
yum install nginx
补充一个编译安装的例子
首先创建nginx用户和组
groupadd nginx
useradd -r -s /sbin/nologin nginx
下载源码包
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar xf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure \
--prefix=/usr/local/nginx
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \ #指定以什么身份运行worker进程
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \ #流媒体模块
--with-http_stub_status_module \ #监控运行状态的模块
--with-http_gzip_static_module \
--http-client-body-temp-path=/usr/local/nginx/client \ #临时包体的暂存路径
--http-proxy-temp-path=/usr/local/nginx/proxy \
--http-fastcgi-temp-path=/usr/local/nginx/fcgi \
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi \
--http-scgi-temp-path=/usr/local/nginx/scgi \
--with-pcre
make && make install

linux-nginx-1

标签:live   个数   open   .com   ast   通信   内存数据   nginx安装   模型   

原文地址:http://blog.51cto.com/12052401/2135818

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!