一. 教程大纲
本系列教程全部为本人在多年开发实践中得出的一些心得和使用方法,如有不当之处,欢迎各位大佬指点
本系列文章总共分文三个部分
Nginx实战01-入门篇
- 入门篇
- 对于Nginx进行简要的介绍
- 部署使用
- 常用的命令
Nginx实战02-中级篇
- 中级篇
- 实战中对于Nginx负载均衡及反向代理的应用
- 以案例的形式介绍一些实用的转发策略
Nginx实战03-高级篇
- 高级篇
- 网络防御
- 建立高可用集群
- 插件
二. Nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web 服务器/反向代理服 务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强.
- 基于以上描述,可以看到几个关键的地方
- 高性能
- 代理
- 正向代理
- 反向代理
- 负载均衡
- 插件
接下来,就以上关键词进行简要的说明,帮助大家初步的认识Nginx的特性
1. 高性能
nginx横空出世之前,Apache服务器一直占据web服务器的垄断地位,所以就用对比的方式来解释nginx那么强!
两者性能差别的主要原因在于网络IO模型选择不同,apache使用了select,而nginx使用了epoll模型!
举个例子:一个万人村里面选村长,有两种方式:
①,让每个人在纸条上写下自己的名字,然后前村长去收集纸条(一个线程去遍历),然后得到村长推荐候选人的名单(需要处理的连接),这就相当于select模型,去轮询每一个连接,并对需要进行处理的连接进行处理!
②,每个人都可以毛遂自荐(每个连接都有可能活跃),想要竞选的在旁边站成一排(事件触发,放入队列中),然后就在这几个人中选择(几个待处理的任务),相当于只要对少量的事件进行处理!
一个是从上万人中循环得到几个进行处理,一个是几个自己站出来直接处理,这种效率相差不是一般的大吧?
nginx是基于epoll模型开发的,而epoll是基于JAVA NIO的同步非阻塞开发,在高并发情况下能支持更多的连接!
nginx是事件驱动的,一个主进程跟多个工作进程组成的工作模式,主线程负责循环分配事件,多个工作线程负责事件的处理!
1. 正向代理
正向代理类似一个堡垒机,代理访问外部资源
例如
我需要在国内访问国外资源,但是由于网络问题导致资源访问失败,但是这时我有一台服务器可以访问外部资源,那么便可以利用该服务器做一层请求中转,即请求跳板
正向代理的一个特点是:客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
1. 反向代理
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
举个例子:
我在生产环境部署了一台服务器,但是我不希望其他用户可以直接通过ip或者域名解析得知我的服务器真实ip地址,这时我便可以设置一个反向代理的服务器,用于隐藏服务器的真实地址,并且起到网络防御的作用
反向代理的作用
- 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
- 负载均衡,通过反向代理服务器来优化网站的负载
1. 插件
nginx提供丰富的服务插件
- 例如
- keepAlived,主从机制,保活
- 图片处理
- 请求令牌桶
- 视频缩略等等
关于插件方面不做过多描述,后续有应用到的时候会单独出一个插件篇的
三. Nginx部署
- 由于绝大多数的生产部署环境为Linux,所以本文基于Linux平台进行部署Nginx,windows平台的部署方式请自行百度
- 学习本文的一些前置知识
- 基础shell命令
- 对HTTP/TCP协议有一定的了解
- 本文的受用人群
- 刚接触Nginx,对负载均衡有兴趣的同学
- 话不多说,进入主题
1. 基于yum的方式进行Nginx部署
- 添加yum源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- 安装nginx
sudo yum install -y nginx
- 启动nginx
nginx
- 完成以上步骤之后可通过访问服务器ip:80端口验证nginx部署是否成功
2. Nginx的一些常用命令及配置文件
注意,以下命令仅在nginx是在使用yum的安装方式安装才可以使用,若非,则需要将nginx安装目录下sbin目录中的nginx可执行文件做软链接
# 仅在非yum安装方式下才需要执行
ln -s /nginx安装目录/sbin/nginx /usr/sbin/nginx
2.1 常用命令篇
- 启动Nginx
nginx
- 检查nginx配置
nginx -t
- 配置重新加载
nginx -s reload
2.2 配置说明篇
- 全局配置
/etc/nginx/nginx.conf
- 自定义配置文件存放目录(主要操作目录)
/etc/nginx/conf.d/