1 简介
1.1 历史
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的.Igor Sysoev在建立的项目时,使用基于BSD许可.自Nginx 发布以来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名.
在俄罗斯许多大网站都已经使用它, 且一直表现不凡.俄罗斯大约有20%左右的虚拟主机是由nignx服务或代理的.Google在线安全博客中统计Nginx服务或代理了大约所有Internet虚拟主机的4%.而Netcraft的统计显示,Nginx服务的主机在过去的一年里以四倍的速度增长并且在这几年里,它的排名还在不断上升
1.2 为什么用Nginx
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 .它支持内核EPoll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数.
-
Nginx具有很高的稳定性,其它HTTP服务器当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应只能重启服务器.例如当前Apache一旦上到200个以上进程,web响应速度就明显非常缓慢了.而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低.Nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对Nginx来说基本上是毫无用处的.就稳定性而言,nginx比lighttpd更胜一筹
-
Nginx支持热部署,它的启动特别容易,
并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动.你还能够在不间断服务的情况下,对软件版本进行进行升级.Nginx采用master-slave模型,能够充分利用SMP的优势,且能够减少工作进程在磁盘I/O的阻塞延迟. -
Nginx代码质量非常高,代码很规范,手法成熟, 模块扩展也很容易.
-
Nginx采用了一些os提供的最新特性如对sendfile (Linux2.2+),acceptfilter(FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,从而大大提高了性能.
当然,nginx还很年轻,多多少少存在一些问题,比如:Nginx是俄罗斯人创建,目前文档方面还不是很完善.因为文档大多是俄语,所以文档方面这也是个障碍.尽管Nignx的模块比较多,但它们还不够完善.对脚本的支持力度不够.
2 安装
2.1 获取Nginx
Nginx的官方网站: http://nginx.org/en/download.html
Nginx官网提供了三个类型的版本
- Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
- Stable version:最新稳定版,生产环境上建议使用的版本
- Legacy versions:老版本的稳定版
在这里我们选择nginx 1.18.0版本,因为后面讲学习平滑升级。
2.2 编译安装
准备一台的虚拟机
- 停止原有web服务器
netstat 查看端口是否被占用 - 添加普通用户账号来运行nginx
[root@nginx ~]# useradd -M -s /sbin/nologin nginx
- 解压并安装Nginx:
[root@nginx ~]# tar xf nginx-1.18.0.tar.gz
[root@nginx ~]# cd nginx-1.18.0
[root@nginx ~]# yum -y install gcc gcc-c++ pcre-devel vim openssl openssl-devel zlib zlib-devel
[root@nginx ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
--prefix=/usr/local/nginx #指定安装路径
--with-http_stub_status_module #启用service status页,默认不启用
--with-http_ssl_module #启用ssl模块,以支持https请求
--sbin-path=/usr/sbin/ #指定二进制命令的路径
出现以下图片表表示成功
继续
[root@nginx ~]# make && make install
出现以下图片表示安装成功
- 启动:
[root@nginx nginx-1.18.0]# /usr/local/nginx/sbin/nginx
nginx命令常用选项:
-v 查看版本号
-V 查看版本号及编译选项
-s 给主进程发送信号.可接 stop | quit | reopen | reload
-t 测试配置是否正确
-c 指定配置文件,默认为 conf/nginx.conf
Tips:
为了避免每次启动都要输入绝对路径,我们创建如下脚本
[root@nginx nginx-1.18.0]# vim /etc/profile.d/nginx.sh
脚本输入如下
执行脚本
[root@nginx nginx-1.18.0]# . /etc/profile.d/nginx.sh
- 查看启动状态:
[root@nginx nginx-1.18.0]# netstat -tlnp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3891/nginx: master
- 测试主页是否可以访问
3 Nginx启动脚本练习
写一个nginx启动脚本,以实现可用service管理nginx服务,并可使用chkconfig来管理服务的开机启动。
- 如果脚本执行时有参数错误,给出帮助信息(start、stop、restart、reload、status、reopen);
- 如果启动或停止失败,给出具体原因(启动失败的原因可能有:端口被占用,配置文件错误,程序已在运行);
- 如果配置文件有语法错误,不允许关闭服务。
(待完成)
yum安装的nginx(epel源)
主目录:/etc/nginx
主配置文件:/etc/nginx/nginx.conf
文档目录:/usr/share/nginx/html
Reference
- 课堂笔记