一、Nginx介绍
Nginx是一款轻量级的Web服务器、反向代理服务器,是由俄罗斯的程序设计师Igor Sysoev所开发,使用C语言开发,由于它的内存占用少,启动速度极快,具有高并发的能力,在互联网项目中被广泛地应用。
它的功能丰富,可作为HTTP服务器,静态资源服务器,也可作为反向代理服务器,邮件服务器等。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。Nginx在全球网站中的市场份额为33.5%,位居第二,仅次于Apache。
二、Nginx下载安装
这里不做详细描述,需要的参考文章:惜缘梦博客 http://ddosi.top/post/13
三、Nginx核心功能
1、反向代理
1)什么是代理呢?
说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中随处可见的中介,我们可以通过中介买到房子,中介就是代理,被代理的就是买房子的人,而我们就是目标角色。
2)正向代理
说到正向代理,应该很多人都接触过,也听过它的名字,那就是我们熟知的VPN:VPN通俗的讲就是一种中转服务,当我们电脑接入VPN 后,我们对外IP地址就会变成VPN服务器的公网IP,我们请求或接受任何数据都会通过这个VPN服务器后传入到我们本机,隐藏了本机的地址。那么这样做有什么好处呢?VPN利用低成本的公共网络作为企业骨干网,同时又克服了公共网络缺乏保密性的弱点,在VPN网络中,位于公共网络两端的网络在公共网络上传输信息时,其信息都是经过安全处理的,可以保证数据的完整性、真实性和私有性。
这里的 VPN 就是做正向代理的。正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端是要进行一些正向代理的设置的。
3)反向代理
反向代理,对比正向代理来说其实就是反过来了,正向代理是隐藏用户的信息,而反向代理是隐藏真实的服务器信息。
反向代理和正向代理的区别就是:正向代理代理的是客户端,反向代理代理的是服务器。
2、负载均衡
利用反向代理可以作为内部负载均衡(load balance) 的手段.
举个例子来说, 比如我现在开发了一个 java web 的博客网站, 我把它直接部署它到 tomcat 服务器上, 让 tomcat 监听 80 端口, 直接对外服务. 一开始访问量也不大, 所以这样也是没有问题的,但是当用户增多,访问量上来的时候,一个tomcat进程处理不过来了,那现在怎么办呢?于是我想到了再起一个tomcat进程,但是这样又多了一个问题,我只有一个80端口,那么我只能起一个其他的端口,这样做的话显然是有问题的,用户在访问的时候不可能有的访问80端口,有的人在访问的时候用其他端口吧。
基于以上的问题,我们可以想到可以用Nginx的反向代理来实现两个tomcat进程的负载均衡,那么我们只需要代理两个tomcat进程,配置负载均衡策略,将入口交给Nginx来管理,那么用户在访问同一个地址的时候就可以将请求分发到不同的tomcat上以实现负载均衡。
一个简单的配置如下:
http {
upstream server1{
server 127.0.0.1:8080 weight=3;
server 127.0.0.1:8081 weight=2;
}
server {
listen 80;
location / {
proxy_pass http://server1;
}
}
}
其中weight是权重,当机器的配置不一样的时候可以控制流向每个机器的流量占比。
3、限流
Nginx限流就是限制用户请求的速度,防止服务器过载的情况
限流一般有3种
正常限制访问频率(正常流量)
突发限制访问频率(突发流量)
限制并发连接数
Nginx的限流都是基于漏桶流算法,后面会说到
四、Nginx基础使用及配置文件介绍
1、Nginx基本命令
nginx -s stop :强制关闭Nginx,可能不保存相关信息,并迅速终止web服务。
pkill nginx :强制关闭nginx
nginx