Nginx说明和使用安装

版权声明:转载请注明来源 https://blog.csdn.net/tangyuan_sibal/article/details/87998658

一、什么是Nginx

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

二 Nginx的功能

1、反向代理
2、负载均衡
3、静态服务器

2.1、反向代理
2.1.1、正向代理

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。

在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。来看个示意图(我把客户端和正向代理框在一块,同属于一个环境,后面我有介绍):
在这里插入图片描述客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。如图。
在这里插入图片描述总结来说:正向代理,“它代理的是客户端”,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

2.1.2反向代理

明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用Nginx进行反向代理实现的,并且通过封装Nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息:http://tengine.taobao.org/。 那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图(我把服务器和反向代理框在一块,同属于一个环境,后面我有介绍):
在这里插入图片描述通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载

2.1.3 两者的区别

截了一张图来说明正向代理和反向代理二者之间的区别,如图。
在这里插入图片描述图解:

在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;

在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;

实际上,Proxy在两种代理中做的事情都是替服务器代为收发请求和响应,不过从结构上看正好左右互换了一下,所以把后出现的那种代理方式称为反向代理了。

2 负载均衡

我们已经明确了所谓代理服务器的概念,那么接下来,Nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?

这里提到的客户端发送的、Nginx反向代理服务器接收到的请求数量,就是我们说的负载量。

请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。

所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡如lvs,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。
在这里插入图片描述Nginx支持的负载均衡调度算法方式如下:

①weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
② ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
③fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
④url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

三、Nginx安装和使用

1、安装环境 ubuntu1.6 (阿里云买的ECS)
2、软件包 nginx1.8,0链接:https://pan.baidu.com/s/16g1a5aqVJBGmGog8skKz9w
提取码:voqe
3、安装步骤
①linux必须安装gcc,因为nginx的源码是c语言开发的,需要经过编译才能用
②安装相关的依赖

apt-get install build-essential
apt-get install libtool

1、PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
2、zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

apt-get install zlib1g-dev

3、openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

apt-get install openssl

③将nginx1.8压缩包上传至Ubuntu服务器端

 tar zxf nginx-1.8.0.tar.gz 

进入压缩好的文件
在这里插入图片描述
执行下面命令

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

因为如果不创建这些目录,直接执行make是不能执行的,创建完成后,注意:启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录

mkdir /var/temp/nginx/client -p
make
make install

至此安装完成,
④启动nginx
进入sbin目录可以看到nginx,执行就可以了

cd /usr/local/nginx/sbin

在这里插入图片描述
./nginx

⑤访问
直接浏览器输入服务器地址(nginx默认80端口,如果用的阿里云服务器要看安全组80端口有没有开放)
在这里插入图片描述4、配置虚拟主机
①什么是虚拟主机

通俗点讲就是在一台服务器上启动多个网站,这时Nginx就派上用场了。而用Nginx配虚拟主机的方式又很简单,主要有两种方式
1、域名不同
2、端口不同

②通过端口区分不同虚拟机
我们可以通过

/usr/local/nginx/conf/nginx.conf

进入nginx.conf文件进行编辑
当然如果你觉得使用linux下修改文件操作不是很熟悉,也可以用Editplus来编辑,在这里插入图片描述这样在window下想怎么ctrl+c ctrl+v就很方便了。
通过端口区别不同虚拟主机的方法,就是在配置文件中新增一个server
在这里插入图片描述
这样就可以
然后重新加载一下配置文件

./nginx -s reload

在这里插入图片描述
③通过域名来配置虚拟主机
我们知道在我们电脑的c盘(C:\Windows\System32\drivers\etc)下面有一个hosts文件,用来配置域名和ip地址的映射关系(经常有捆绑软件偷偷修改你这里面的内容来捆绑你访问网站的跳转)
所以我们可以来设置转发到我们的服务器
在这里插入图片描述
如图,我们将这两个网址都转发到我们的服务器上面去
在这里插入图片描述
然后再配置文件中修改server_name
在这里插入图片描述
这里差不多跟端口一样,当我们接收到这个网址时候,我们要访问哪个服务,这样就可以了。而这样也就是反向代理的原理,我们可以在服务器上配置两台tomcat,然后一个开8080端口,一个开8081端口,
在这里插入图片描述

修改nginx.conf文件
在这里插入图片描述
使用proxy_pass代理转发到指定的tomcat上,这样就实现了反向代理
5、负载均衡
负载均衡就是配置多台服务器,使用nginx对多台服务器的分配,比如我们现在新增一个tomcat来分担访问 www.sohu.com这个网站的访问
在这里插入图片描述
其中weight的值越高,访问的几率越大,所以我们当不设定值时,是平摊,一人访问一次。这样就实现了负载均衡。

四、总结

其实nginx的反向代理和负载均衡是一种套的,一般是合在一起使用,而且使用起来只需修改配置文件,当然其他比较复杂的功能和机制还没有深入学习。
此外nginx也可以用来作为静态服务器
参考资料:https://www.cnblogs.com/wcwnina/p/8728391.html 这个文章对nginx的讲解很浅显易懂

猜你喜欢

转载自blog.csdn.net/tangyuan_sibal/article/details/87998658