玩转 nginx 之最好的 web 服务器
nginx 简介
nginx是一个web服务器;类似Apache软件。这是由俄国人开发的一个软件。其早期开发的这个软件主要是用于邮件代理。后面才转换为 web 服务和 负载均衡和反向代理。
官网:nginx.org/
中文社区:www.nginx.cn/
为什么会出现 nginx 这个软件?
主要是由于现在处于web2.0的时代,存在大量的动态请求(出现了 C10K ),原先的 Apache 软件已经无法在支持;这个时候才出现 nginx 。nginx在解决高并发的情况下有很好的优势。一般在1U的服务器上,支持3-5w静态的并发是完成没问题的,官方测试:10w并发。
什么是 c10k 的问题?
当一个网站并发量达到10k【1w个人同时在1s之内访问】的时候,整个网站的架构需要重新的更换一下。目前c100k出现了。
常见 web 服务器的分类
- apache: 一般在Linux下叫做 httpd
- nginx: 轻量级的web服务器,轻内核的web服务器,众多的其他的特性需要其他的模块进行提供
- IIS:Windows下的一个web服务器,常见的和sql server 以及 windows server一起使用,由于其操作都是图形化配置,也占据了一定的市场
- Lighttpd: 主要是用来提供图片服务,国内豆瓣使用最多 5.tomcat :Java里面的一个web服务器容器
哪里在使用web服务器?
抓包查看 各大网站
- 搜狐
- 赶集
- 豆瓣
- 淘宝
- ...
tengine服务器:是由阿里的技术团队对 nginx 服务器进行二次开发后形成一个更加强大和稳定的 web 服务器。更适合中国人的开发环境。国内很多的网站基本都是使用的是tengine。
nginx 软件安装
- 下载源码包
- 解压
- 编译安装
- 启动服务
nginx 软件的基本管理
- 启动服务
- 查看服务状态
- 关闭服务
nginx 之配置文件讲解
nginx 提供的服务都是受到其配置文件的影响,在改变配置文件后,需要重启服务器。
nginx的虚拟主机的配置
参考文档:tengine.taobao.org/nginx_docs/…
基于域名的虚拟主机配置
基于端口的配置
负载均衡配置
由于单台web服务器的能力有限,这个时候如果为了提供更大的服务能力,需要做扩展。常见的扩展分为两类:
- scale out (水平扩展或者向外扩展):增加很多台web服务器提供服务。
- scale up|on (垂直扩展或者向上扩展 ):主要是在单台服务器上不断的增加硬件的配置)。
反向代理配置
Nginx 服务器的反向代理服务是其最常用的重要功能,通过反向代理服务也可以衍生出很多与此相关的 Nginx 服务,比如后面会介绍的负载均衡。当然在了解反向代理之前,我们需要先知道什么是代理,然后在了解代理的分类?
什么是代理?
现实生活中很多地方也会使用代理:例如打官司、房屋中介等等...
比如我们要买一间二手房,虽然我们可以自己去找房源,但是这太花费时间精力了,而且房屋质量检测以及房屋过户等一系列手续也都得我们去办,再说现在这个社会,等我们找到房源,说不定房子都已经涨价了,那么怎么办呢?最简单快捷的方法就是找二手房中介公司(为什么?别人那里房源多啊),于是我们就委托中介公司来给我找合适的房子,以及后续的质量检测过户等操作,我们只需要选好自己想要的房子,然后交钱就行了。
代理简单来说,就是如果我们想做什么,但又不想直接去做,那么这时候就找另外一个人帮我们去做。那么这个例子里面的中介公司就是给我们做代理服务的,我们委托中介公司帮我们找房子。
Nginx 主要能够代理如下几种协议,其中用到的最多的就是做 Http 代理服务器。
代理的分类
- 正向代理
- 反向代理
正向代理
弄清楚什么是代理了,那么什么又是正向代理呢?
大家都知道,现在国内是访问不了 Google的,那么怎么才能访问 Google呢?我们又想,美国人不是能访问 Google吗(这不废话,Google就是美国的),如果我们电脑的对外公网 IP 地址能变成美国的 IP 地址,那不就可以访问 Google了。你很聪明,VPN 就是这样产生的。我们在访问 Google 时,先连上 VPN 服务器将我们的 IP 地址变成美国的 IP 地址,然后就可以顺利的访问了。
这里的 VPN 就是做正向代理的。正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端是要进行一些正向代理的设置的。
什么是 VPN?
VPN 通俗的讲就是一种中转服务,当我们电脑接入 VPN 后,我们对外 IP 地址就会变成 VPN 服务器的 公网 IP,我们请求或接受任何数据都会通过这个VPN 服务器然后传入到我们本机。这样做有什么好处呢?比如 VPN 游戏加速方面的原理,我们要玩网通区的 LOL,但是本机接入的是电信的宽带,玩网通区的会比较卡,这时候就利用 VPN 将电信网络变为网通网络,然后在玩网通区的LOL就不会卡了。
反向代理
反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
下面通过两张图来对比正向代理和方向代理:
理解这两种代理的关键在于代理服务器所代理的对象是什么,正向代理代理的是客户端,我们需要在客户端进行一些代理的设置。而反向代理代理的是服务器,作为客户端的我们是无法感知到服务器的真实存在的。
总结起来还是一句话:正向代理代理客户端,反向代理代理服务器。
扩展
openresty
这个产品是由前淘宝的章亦春基于nginx做的一个二次发行的的版本。
其主要的特点是利用lua语言作为nginx的模块开发语言。之前nginx的模块开发语言使用的是C语言。