初识---Nginx

雁过拔毛篇之Nginx,哈哈这样说感觉挺恰当的。如果你也是想了解一下Nginx是什么怎么用的话,相信这篇文章对你应该有很大的帮助。连着好几天都在赶实验、赶报告…还有一些其他的烦心事,心累。心累就听听歌,再难也笑着活下去.?原谅博主目前还比较菜,以后会尽量提高文章质量的,接着过一段时间准备写挖穿Spring、SpringMVC、MyBatis系列文章,梳理一下SSM框架的部分源码。提升自己对SSM框架的理解,如有不足,欢迎交流。


Nginx简介

在这里插入图片描述

什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 ----百度百科

这里说到Nginx是俄罗斯人搞的,大家应该也就知道为什么读起来这么别扭了。英文不像英文的。

为什么使用Nginx

在传统的Web项目中,并发量小,用户使用的少。所以在低并发的情况下,用户可以直接访问tomcat服务器(极限四五百),然后tomcat服务器返回消息给用户。比如,我们上传图片到服务器。但是如果发生高并发的情况我们这种架构还扛得住吗?答案肯定是否定的。我们一般的解决方案就是再加一台tomcat服务器,那么问题来了,我们把图片上传到了tomcat1上了,当我们要访问这个图片的时候,tomcat1正好在工作,所以访问的请求就交给其他的tomcat操作,而tomcat之间的数据没有进行同步,当用户在此查看图片时候可能就是tomcat2提供服务,但是tomcat2服务器上并没有图片,用户再一刷,哎又有了?这时候用户就懵逼了,这种用户体验是极不好的。所以就发生了我们要请求的图片找不到。

服务器对于大量图片的存储方案并不推荐在tomcat上直接存储,更安全、更可用的、更高效、方便扩展的是使用图片服务器(FastDFS)来提供图片这类静态资源的管理。

在这里插入图片描述
看到这里大家可能会问,既然我们要选择的是http服务器,为什么不继续使用tomcat,而要使用Nginx?
原因如下:nginx常用做静态内容服务和代理服务器,直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器。

Nginx能干什么

  • http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  • 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

Nginx有什么优势

1、轻量级,内存、cpu资源占用相比于apache要少;
2、抗并发,Nginx处理请求是异步非阻塞型的,apache处理请求是阻塞型的,在高并发的情况下Nginx能保持低资源低消耗高性能;(能支持5万的并发链接)
3、配置文件简单;
4、提供负载均衡、反向代理、支持rewrite,支持gzip压缩,支持第三方插件;
5、稳定性高,宕机几率非常小;


Nginx的反向代理

下面我重点介绍一下什么是反向代理,以及Nginx如何实现反向代理。

什么是正向代理

反向代理?有没有正向代理?什么是正向代理呢?
如图所示:假如我是一个用户,我需要访问某网站,这时候需要一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
在这里插入图片描述
?如果说还需要再简单粗暴一点的话,那就是你租房的时候找的中介,中介带着你去找房子。

什么是反向代理

如图所示:
在这里插入图片描述

反向代理比较官方的解释: 通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。
而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

?反向代理的简单的理解就是:用户需要访问服务器资源,通过一个中间代理,帮你找到哪台机器为你提供服务。反向代理服务器是引用在服务端。决定哪台服务器提供服务。这里我们就可以引出负载均衡的概念。
在这里插入图片描述

什么是负载均衡

一台普通服务器的处理能力是有限的,假如能达到每秒几万个到几十万个请求,但却无法在一秒钟内处理上百万个甚至更多的请求。但若能将多台这样的服务器组成一个系统,并通过软件技术将所有请求平均分配给所有服务器,那么这个系统就完全拥有每秒钟处理几百万个甚至更多请求的能力。这就是负载均衡最初的基本设计思想。

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求按照某种策略分配到服务器集合的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡解决了大量并发访问服务问题,其目的就是用最少的投资获得接近于大型主机的性能。
在这里插入图片描述

Nginx通过反向代理实现网站的负载均衡

Nginx安装

nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境。

一.环境准备

  • 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++
  • PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
    yum install -y pcre pcre-devel
    注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
  • zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。yum install -y zlib zlib-devel
  • OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。yum install -y openssl openssl-devel

二.编译安装

  • 将nginx-1.8.0.tar.gz拷贝至linux服务器。
  • 解压:tar -zxvf nginx-1.8.0.tar.gz cd nginx-1.8.0
  • ./configure --help查询详细参数
    参数设置如下:
    ./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

注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录

  • 编译安装
    make
    make install
    在这里插入图片描述

启动Nginx

  • cd /usr/local/nginx/sbin/
  • ./nginx

Nginx反向代理

应该有一个nginx服务器有多个应用服务器(可以是tomcat)可以使用一台虚拟机,安装一个nginx,多个tomcat,来模拟。

在这里插入图片描述

Nginx负载均衡

只需要在upstream的server后面添加一个weight即可代表权重。权重越高,分配请求的数量就越多。默认权重是1

在这里插入图片描述

测试

简单介绍一下对于反向代理实现网站的负载均衡的测试的步骤:

  1. 安装两个tomcat
    在这里插入图片描述
  2. 修改其端口
    一个为8080一个为8081
  3. 方便观察效果,将webapps目录下的文件删除,各写入一个index.html,内容随便能分辨就行
    . 在这里插入图片描述
    在这里插入图片描述
  4. 进入nginx目录
    在这里插入图片描述
  5. 修改以下内容
    在这里插入图片描述
  6. 执行 # ./nginx -s reload
  7. 开启两个tomcat和nginx
  8. 访问页面
    在这里插入图片描述
    在这里插入图片描述
    在此多次刷新你会发现页面内容会轮流出现,也就是Nginx提供的轮询方式。在此你可以修改他的权重来改变出现的概率。到这基本上Nginx的介绍就结束了。

附录

  • 停止Nginx
    方式1,快速停止:
    cd /usr/local/nginx/sbin
    ./nginx -s stop
    此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
    方式2,完整停止(建议使用):
    cd /usr/local/nginx/sbin
    ./nginx -s quit
    此方式停止步骤是待nginx进程处理任务完毕进行停止。
  • 重启Nginx
    方式1,先停止再启动(建议使用):
    对nginx进行重启相当于先停止nginx再启动nginx,即先执行停止命令再执行启动命令。
    如下:
    ./nginx -s quit
    ./nginx
    方式2,重新加载配置文件:
    当nginx的配置文件nginx.conf修改后,要想让配置生效需要重启nginx,使用-s reload不用先停止nginx再启动nginx即可将配置信息在nginx中生效,如下:
    ./nginx -s reload
  • 启动Nginx cd /usr/local/nginx/sbin/ ./nginx