- Nginx介绍
nginx(发音”engine x”)是俄罗斯软件工程师Igor Sysoev开发的免费开源web服务器软件。Nginx本身是一款静态(html,js,css,jpg等)的www软件,不能解析动态的PHP,JSP,DO。如果要解析,还需要装对应的引擎。具备IMAP/POP3和SMTP服务器功能,Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,包括新浪、腾讯等知名网站都已使用Nginx作为Web应用服务器。
1.Nginx的功能描述
1). Nginx的特性
-
- 模块化设计、较好的扩展性
- 高可靠性:一个master启动一或多个worker,每个worker响应多个请求
- 低内存消耗:10000个keepalive连接在Nginx中仅消耗5MB内存(官方数据)
- 支持热部署:不停机更新配置文件、更新日志文件、更新服务器程序版本
2).Nginx的基本功能
-
- 静态web资源服务器,能够缓存打开的文件描述符
- 支持http/imap/pop3/smtp的反向代理;支持缓存、负载均衡
- 支持fastcgi(fpm)
- 模块化,非DSO机制,支持过滤器zip压缩,SSI以及图像大小调整
- 支持SSL
3).Nginx的扩展功能
-
- 基于名称和IP的虚拟主机
- 支持keepalive的保持机制
- 支持平滑升级
- 定制访问日志,支持使用日志缓存区提高日志存储性能
- 支持url rewrite
- 支持路径别名(root或alias指定)
- 支持基于IP以及用户的访问控制
- 支持传输速率限制,并发限制
4).Nginx的基本架构
-
- 一个master进程,生成一个或者多个worker进程,每个worker响应多个请求
- 事件驱动:epoll,kqueue,poll,select,rt signals
- 支持sendfile,sendfile64
- 支持AIO
- 支持mmap
5).Nginx模块类型
-
- Nginx core module: nginx的核心模块
- Standard HTTP modules:nginx的标准模块
- Optional HTTP modules:nginx的可选模块
- Mail modules :nginx的邮件模块
- 3rd party modules:nginx的第三方模块
6).Nginx进程详解
主进程主要完成如下工作:
-
- 读取并验正配置信息;
- 创建、绑定及关闭套接字;
- 启动、终止及维护worker进程的个数;
- 无须中止服务而重新配置工作特性;
- 控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;
- 重新打开日志文件,实现日志滚动;
- 编译嵌入式perl脚本;
worker进程主要完成的任务包括:
-
- 接收、传入并处理来自客户端的连接;
- 提供反向代理及过滤功能;
- cache loader进程主要完成的任务包括:
- 检查缓存存储中的缓存对象;
- 使用缓存元数据建立内存数据库;
cache manager进程的主要任务:
缓存的失效及过期检验;
- 优越的特性;
- 作为Web服务器;相比较与Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤为受到虚拟主机提供商的欢迎,能够支持高达50000个并发的连接数的响应。
- 作为负载均衡服务器器:Nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代理服务器对外惊醒服务,Nginx用C语言编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多
- 作为邮件代理服务器,Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),fm描述了成功并且美妙的使用经验。
- Nginx安装非常简单,配置文件非常简介(还能够支持perl语法),Bugs非常少的服务器:Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数月也不需要重新启动。还能够在不间断服务的情况下进行软件版本平滑升级。
- Nginx的应用场合
- 提供静态服务(图片,视频服务),html,js,css,flv,jpg等。类似Lighttpd并发:几万并发
- 动态服务,Nginx+Fastcgi的方式运行php,jsp。动态并发:500-1500
- 提供反向代理服务,或者称之为负载均衡,日PV2000W以下,都可以直接使用Nginx做代理。F5、A10、haproxy、NetScaler
缓存服务。类似squid,varnish,sts
- 课后作业:Nginx使用的epoll模型与Apache使用的select模型区别
- Nginx支持虚拟主机
一个server标签就是虚拟主机
- 基于域名的虚拟主机。通过域名来区分虚拟主机
应用:外部网站
- 基于端口的虚拟主机。通过端口来区分虚拟主机
应用:公司内部网站,网站的后台……
-
-
- 基于IP的虚拟主机。几乎不用,不支持ifconfig别名,配置文件可以
-
二.安装Nginx-6.3
- 基础软件准备
- 安装PCRE
PCRE(Perl Compatible Regular Expressions,中文perl 兼容的正则表达式)是一个Perl库,包括 perl 兼容的正则表达式库。官网:http://www.perl.org
原因:HTTP rewrite module requires the PCRE library
rpm -aq pcre pcre-devel
yum install -y pcre-devel
- 安装openssl
原因:SSL module require the openssl library
yum install -y openssl-devel
- 安装Nginx
useradd -s /sbin/nologin -M nginx #创建用户,也可以在安装后创建
mkdir /server/tools -p
cd /server/tools
wget http://nginx.org/download/nginx-1.6.3.tar.gz
tar zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3
./configure –help #查看帮助
***********************************************
……
–without-http_rewrite_module disable ngx_http_rewrite_module
–without-http_proxy_module disable ngx_http_proxy_module
……
***********************************************
如上模块默认都是被加进去的,如果不想安装类似模块客家以上参数,本次安装参数如下
./configure –prefix=/application/nginx-1.6.3 –user=nginx –group=nginx –with-http_ssl_module –with-http_stub_status_module
make && make install
cd ..
ln -s /application/nginx-1.6.3 /application/nginx
/application/nginx/sbin/nginx #启动进程,不报错则表示启动成功
ps -ef|grep nginx|egrep -v grep #查看启动进程
netstat -lntup|grep nginx #查看端口,直接过滤80有可能查处多余项
/application/nginx/sbin/nginx -V #查看编译参数
如果/application/nginx/sbin/nginx 出现如下错误:
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
解决办法:
- ln -s /usr/local/lib/libpcre.so.1 /lib64
- echo “/usr/local/lib/”>>/etc/ld.so.conf
ldconfig
- nginx缓存安装
cd /server/scripts
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf ngx_cache_purge-2.3.tar.gz
wget http://nginx.org/download/nginx-1.6.3.tar.gz
tar zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3
./configure –prefix=/data/nginx-1.6.3 –user=nginx –group=nginx –with-http_ssl_module –with-http_stub_status_module –add-module=../ngx_cache_purge-2.3
make && make install
ln -s /data/nginx-1.6.3/ /data/nginx