Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
以上内容摘选自 百度百科 - nginx 词条
下面让我们一同学习 Nginx 的知识。
Nginx 是什么
Nginx 读音'Engine X', 很多工程师也喜欢读成'恩基克思'。
Nginx 是一款高性能的 HTTP 和反向代理服务器软件,第一个开源版本诞生于 2004 年,虽然诞生较晚但经过十多年的发展,已经成为非常流行的 Web 服务器软件,下图是 w3techs 公布的全球网站服务器软件统计报告:
截止到 2014 年 12 月 31 日,Nginx 仅次于 Apache 成为第二大 Web 服务器软件,而在全球最忙碌 top10000 网站中使用比例更是高达 42.7%。其发展速度和流行程度已经远远超过其它同类软件,成为大型网站和高并发网站的首选。
下面列出一些使用 Nginx 的网站:
Nginx 为什么流行
市场往往会选择简单实用的技术,Nginx 之所以能够脱颖而出,可以说是 Nginx 的特性迎合了市场的发展趋势。
近几年来,随着硬件成本的降低,个人电脑和移动设备得到了普及,Web 服务器在互联网中的角色与十几年前的相比已大不相同。高并发已经成为趋势,而高并发又要求架构具有健壮性和可伸缩性。
这些正是 Nginx 的特性,它是为性能而生,从发布以来一直侧重于高性能、高并发、低 CPU 内存消耗;在功能方面:负载均衡、反向代理、访问控制、热部署、高扩展性等特性又十分适合现代的网络架构。更可贵的是配置简单文档丰富,大大降低了学习的门槛。像这样稳定性能强、功能丰富又简单的产品当然会受欢迎了。
为什么选择 Nginx
Apache 自 1990 年发布以来,一直是 web 服务器市场的王者。Nginx 出现较晚,因其在高并发下卓越的表现,最初是作为 Apache 在高并发情况下的补充(当时 Nginx+Apache 是流行的架构)。
现在 Nginx 的功能已经十分完善,多数场合下不需要 Nginx+Apache 这样复杂的架构,那么问题来了,选择 Nginx 还是 Apache?
Nginx 和 Apache 相同点
- 同是 HTTP 服务器软件,都采用模块化结构设计
- 支持通用语言接口,如 PHP、Python 等
- 支持正向代理和反向代理
- 支持虚拟主机及 SSL 加密传输
- 支持缓存及压缩传输
- 支持 URL 重写
- 模块多,扩展性强
- 多平台支持
Nginx 的优势
- 轻量级:安装文件小,运行时 CPU 内存使用率低;
- 性能强:支持多核,处理静态文件效率高,内核采用的 poll 模型最大可以支持 50K 并发连接;
- 支持热部署,同时启动速度快,可以在不间断服务的情况下对软件和配置进行升级;
- 负载均衡,支持容错和健康检查;
- 代理功能强大,支持无缓存的反向代理,同时支持 IMAP/POP3/SMTP 的代理。
Nginx 的劣势
- 相比 Apache 模块要少一些,常用模块都有,支持 LUA 语言扩展功能;
- 对动态请求支持不如 Apache;
- Windows 版本功能有限,受限于 Windows 的特性,支持最好的还是 Unix/Linux 系统。
Nginx 工作原理
Nginx 由内核和一系列模块组成:内核提供 web 服务的基本功能,如启用网络协议、创建运行环境、接收和分配客户端请求、处理模块之间的交互。模块实现 Nginx 的各种功能和操作,Nginx 的模块从结构上分为核心模块、基础模块和第三方模块。
- 核心模块: HTTP 模块、EVENT 模块和 MAIL 模块
- 基础模块: HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块
- 第三方模块: HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key 模块及用户自己开发的模块
这样的设计使 Nginx 方便开发和扩展,也正因此才使得 Nginx 功能如此强大。Nginx 的模块默认编译进 Nginx 中,如果需要增加或删除模块,需要重新编译 Nginx,这一点不如 Apache 的动态加载模块方便。如果有需要动态加载模块,可以使用由淘宝网发起的 Web 服务器 Tengine,在 Nginx 的基础上增加了很多高级特性,完全兼容 Nginx,已被国内很多网站采用。
LNMP 系统安装(L-N-M-P)
前期准备(环境要求,库依赖)
如果你的物理机上用 apt-get 安装了老版的 Nginx,或者你的 Nginx 有问题,可以使用 sudo apt-get purge nginx
命令删除已安装的 Nginx。
针对后面的 nginx 源码编译安装(如果选择 apt-get
的方式则不需要,我们在这里会有简单的库依赖列表,需要读者参照解决。
ssl 功能需要 openssl 库
gzip 模块需要 zlib 库
rewrite 模块需要 pcre 库
这些库可以点击后在相应官网进行下载、解压、编译、安装。(下载最新的最好)
Mysql
sudo apt-get install mysql-server mysql-client
然后你会看见输入密码的界面,你只需接下来输入管理员密码就行。
如果不安装,直接使用环境中的 MySQL,只需要在环境中使用 sudo service mysql start
启动 MySQL,环境里的 MySQL 用户为 root
,密码为空。
修改 MySQL 的配置文件
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
将 bind-address = 127.0.0.1
注释掉(在对应的行前面添加 #
),就可以远程连接数据库了
Php安装
sudo apt-get install mysql-server mysql-client
然后你会看见输入密码的界面,你只需接下来输入管理员密码就行。
如果不安装,直接使用环境中的 MySQL,只需要在环境中使用 sudo service mysql start
启动 MySQL,环境里的 MySQL 用户为 root
,密码为空。
修改 MySQL 的配置文件
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
将 bind-address = 127.0.0.1
注释掉(在对应的行前面添加 #
),就可以远程连接数据库了