玩转 nginx 之最好的 web 服务器

900 阅读6分钟

玩转 nginx 之最好的 web 服务器

nginx 简介

nginx是一个web服务器;类似Apache软件。这是由俄国人开发的一个软件。其早期开发的这个软件主要是用于邮件代理。后面才转换为 web 服务和 负载均衡和反向代理。

ngix-logo

官网:nginx.org/

中文社区:www.nginx.cn/

为什么会出现 nginx 这个软件?

主要是由于现在处于web2.0的时代,存在大量的动态请求(出现了 C10K ),原先的 Apache 软件已经无法在支持;这个时候才出现 nginx 。nginx在解决高并发的情况下有很好的优势。一般在1U的服务器上,支持3-5w静态的并发是完成没问题的,官方测试:10w并发。

什么是 c10k 的问题?

当一个网站并发量达到10k【1w个人同时在1s之内访问】的时候,整个网站的架构需要重新的更换一下。目前c100k出现了。

常见 web 服务器的分类

  1. apache: 一般在Linux下叫做 httpd
  2. nginx: 轻量级的web服务器,轻内核的web服务器,众多的其他的特性需要其他的模块进行提供
  3. IIS:Windows下的一个web服务器,常见的和sql server 以及 windows server一起使用,由于其操作都是图形化配置,也占据了一定的市场
  4. Lighttpd: 主要是用来提供图片服务,国内豆瓣使用最多 5.tomcat :Java里面的一个web服务器容器

哪里在使用web服务器?

抓包查看 各大网站

  1. 搜狐
  2. 赶集
  3. 豆瓣
  4. 淘宝
  5. ...

tengine服务器:是由阿里的技术团队对 nginx 服务器进行二次开发后形成一个更加强大和稳定的 web 服务器。更适合中国人的开发环境。国内很多的网站基本都是使用的是tengine。

网站:tengine.taobao.org/

nginx 软件安装

  1. 下载源码包
  2. 解压
  3. 编译安装
  4. 启动服务

nginx 软件的基本管理

  1. 启动服务
  2. 查看服务状态
  3. 关闭服务

nginx 之配置文件讲解

nginx 提供的服务都是受到其配置文件的影响,在改变配置文件后,需要重启服务器。

nginx的虚拟主机的配置

参考文档:tengine.taobao.org/nginx_docs/…

基于域名的虚拟主机配置

基于端口的配置

负载均衡配置

由于单台web服务器的能力有限,这个时候如果为了提供更大的服务能力,需要做扩展。常见的扩展分为两类:

  1. scale out (水平扩展或者向外扩展):增加很多台web服务器提供服务。
  2. scale up|on (垂直扩展或者向上扩展 ):主要是在单台服务器上不断的增加硬件的配置)。

反向代理配置

Nginx 服务器的反向代理服务是其最常用的重要功能,通过反向代理服务也可以衍生出很多与此相关的 Nginx 服务,比如后面会介绍的负载均衡。当然在了解反向代理之前,我们需要先知道什么是代理,然后在了解代理的分类?

什么是代理?

现实生活中很多地方也会使用代理:例如打官司、房屋中介等等...

比如我们要买一间二手房,虽然我们可以自己去找房源,但是这太花费时间精力了,而且房屋质量检测以及房屋过户等一系列手续也都得我们去办,再说现在这个社会,等我们找到房源,说不定房子都已经涨价了,那么怎么办呢?最简单快捷的方法就是找二手房中介公司(为什么?别人那里房源多啊),于是我们就委托中介公司来给我找合适的房子,以及后续的质量检测过户等操作,我们只需要选好自己想要的房子,然后交钱就行了。

代理简单来说,就是如果我们想做什么,但又不想直接去做,那么这时候就找另外一个人帮我们去做。那么这个例子里面的中介公司就是给我们做代理服务的,我们委托中介公司帮我们找房子。

Nginx 主要能够代理如下几种协议,其中用到的最多的就是做 Http 代理服务器。

nginx代理服务

代理的分类

  1. 正向代理
  2. 反向代理

正向代理

弄清楚什么是代理了,那么什么又是正向代理呢?

大家都知道,现在国内是访问不了 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

网站:openresty.org/cn/

这个产品是由前淘宝的章亦春基于nginx做的一个二次发行的的版本。

其主要的特点是利用lua语言作为nginx的模块开发语言。之前nginx的模块开发语言使用的是C语言。