nginx

来源:互联网 发布:淘宝图片空间授权管理 编辑:程序博客网 时间:2024/06/05 09:57

一、           Introduction

Nginx是一个高性能的HTTP和反向代理服务器,也是一个imap/pop3/smtp服务器。稳定性、丰富的功能集、实例配置文件和低系统资源消耗是它的特点。它是一款轻量级的web服务器/反向代理服务器及电子邮件代理服务器。占有内存少、并发能力强,使它表现突出,很多大网站都用它。

涉及到的部门名词的解释:

1.       服务器

服务器是提供计算服务的设备,它响应服务请求,并进行处理。服务器包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,和计算机类似,但是性能要求较高。在网络中,服务器按照类型,分为文件服务器、数据库服务器、应用程序服务器和web服务器等。

2.       代理服务器

代理服务,proxy  server,是一个重要的服务器安全功能,它的工作主要在OSI模型的会话层,可以起到防火墙的作用。代理服务器主要用来连接internet和lan。代理服务,允许一个客户端通过这个服务与另一个服务器进行非直接的连接。一些网关、路由器等网络设备具有网络代理功能。代理服务器就是提供代理服务的电脑系统或者其他类型的网络终端,实际上就是代理网络用户去取得网络信息,可以通过图书管理员代替学生到图书馆借书的例子来理解这个关系,代理服务器具有缓存和安全的优点。

代理服务器也可以分为很多种,如标准的代理缓存服务器,透明代理缓存服务器,反向代理缓存服务器。一般情况下,如不特别说明,代理服务器就是指标准的代理服务器,也就是正向代理服务器,正向代理服务器的工作原理是,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并获得内容返回给客户端,在正向代理中,客户端必须设置正向代理服务器。

3.       反向代理

Reverse  proxy,以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,这个代理服务器在外表现看来就是一个反向代理服务器。与正向代理相比,反向服务器的工作原理,客户端直接向反向代理的命名空间中的内容发送请求,客户端是不需要指定原始服务器的,然后反向代理判断向何处(原始服务器)转交请求,并获得内容返回给客户端。这个过程中,客户端认为它访问的就是原始服务器,实际上并不是,而是反向代理服务器。简单的说,正向代理是代理客户端去访问原始服务器;而反向代理代理原始服务器去响应和处理客户端的请求。

二、           Nginx在实际应用中的特点

1.       反向代理

Nginx是比较优秀的反向代理服务器,反向代理是它的重要应用。

2.       负载均衡

Load balance。通过nginx可以实现负载均衡。负载均衡,就是在现有网络结构之上,提供的一种廉价有效透明的扩展网络设备和服务器宽带、吞吐量等的方式。原理是将数据流量分摊到多个服务器上执行,以减轻服务器的压力,多台服务器共同完成任务,从而提高数据的吞吐量。一般称通过nginx搭建的多个服务器成为集群。

3.       动静分离

Web服务器中有动态资源和静态资源,静态资源基本是固定的,采用nginx将静态资源放到反向代理服务器,实现动态资源和静态资源的分离,也可以减轻原始服务器的压力和提高访问速率。

三、           在windows平台搭建nginx集群

(一)搭建集群的步骤:

1.       创建两个文件夹,分别各放一个tomcat。

2.       分别将同一个项目放到两个tomcat的webapps目录下,启动tomcat解压war文件后,将其中一个项目的jsp页面做修改以区别另一个。

3.       将其中一个tomcat的端口号改为不是8080的,为了能够同时启动这两个tomcat做测试。

4.       在与tomcat相同的目录下,新建nginx的文件夹,将windows版的nginx解压文件放到这个文件夹。

5.       打开nginx。

6.       打开浏览器,访问本地地址127.0.0.1,就可以访问nginx,浏览器默认访问的端口号是80,nginx的默认端口也是80。

7.       在nginx的目录下打开conf目录,进入打开nginx.conf。

8.       如果只需要代理一台服务器,可以在nginx.conf中在location/{}中加入 proxy_pass  http://localhost:8080;

如:

server{

       location  /  {

       ……

       proxy_pass  http://localhost:8080;

}

9.       重启ngxin,在进程中关闭nginx,然后在打开nginx。

10.   这时,nginx已经可以代理一台tomcat服务器。

11.   创建代理集群,在nginx.conf文件中,在http{….}中添加upstream myupstream{server ip:port;server  ip:port},然后在server{location{  }}中添加proxy_pass  http://myupstream;

如:

http{

       ……

       Upstream  myservers{

              Server  127.0.0.1:8080;

              Server  127.0.0.1:8090;

       }

       Server{

              Location{

                     …

                     Proxy_pass  http://myservers;

              }

       }

       ……

}

上述的设置就是代理集群的设置,其中可以设置负载均衡的配置,比如

       Upstream  myservers{

              Server  127.0.0.1:8080  weight=1;

              Server  127.0.0.1:8090  weight=2;

       }

(二)上述的过程中存在可能由于提交数据时分配到另一个tomcat而导致session的id丢失的问题。一般有三种方式解决这个问题。

方法一:

通过web服务器内部解决,又称为广播机制。

在tomcat下,使用这个方法性能会降低,在weblogic上几乎不影响性能。

步骤:

1.       修改集群中所有的tomcat的server.xml文件,支持共享;将其中的<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>从注释中解放。

2.       修改项目的配置文件,在web.xml中添加<distributable />

3.       重启tomcat,测试。

注意:这种方式在linux下无效。

方法二:

将session放入redis等缓存中。

 

方法三:

思路是保证一个ip地址永远访问的是同一台服务器。在nginx的配置文件nginx.conf的upstream中添加ip_hash;比如:

    upstream myservers{

              server  127.0.0.1:8080 weight=1;

              server  127.0.0.1:8090 weight=2;

              ip_hash;

       }

注意:这个方法一般使用于linux。

四、           在linux平台搭建nginx集群

(一)搭建的步骤

1.       安装nginx

1)       在linux安装ngxin,上传压缩包到linux,在usr/local下创建nginx目录,然后将nginx的压缩包解压到这个目录下。

2)       Nginx使用c编译的,安装nginx依赖gcc环境,如果没有gcc,要安装gcc;

centos版本下:yum  install  gcc-c++;ubuntu版本下:apt-get install  gcc  g++;

3)       还要安装pcre,zlib,openssl这3个依赖包;

Centos版本下:yum  install  -y pcre  pcre-devel;yum  install -y  zlib  zlib-devel;yum install  -y  openssl openssl-devel;

Ubuntu版本下:sudo  install  libpcre3 libpcre3-dev;sudo apt-get  install  libtool;sudo apt-get  install  openssl libssl-dev  libperl-dev;

4)       执行编译,先进入ngxin的目录,执行./configure;

5)       执行make

6)       执行make install

7)       启动ngxin测试是否安装成功,cd ../进入/usr/local/nginx目录,进入sbin,执行./nginx,启动nginx,使用ps -ef|grep  nginx,查看是否启动;

8)       将端口号80从防火墙放行,/sbin/iptables -I INPUT -p tcp --dport 80-j ACCEPT,/etc/rc.d/init.d/iptables save;

9)       关闭nginx的方法,./nginx -s  stop,这种方式是kill方式,比较直接,./nginx  -s  quit,也可以关闭,这条命令最好在程序执行完毕使用比较好。

10)   使用./nginx -s  reload,可以动态加载配置文件,就是在不关闭nginx的情况下更新配置文件。

2.       部署同一个项目到两个tomcat

1)       创建两个tomcat的解压包目录,以便可以模拟两台服务器做测试,将同一个项目分布部署到这两个tomcat。

2)       修改其中一个tomcat的端口号。

注意修改端口号的地方:

<Serverport="8005" shutdown="SHUTDOWN">

  <ListenerclassName="org.apache.catalina.startup.VersionLoggerListener" />

这个8005要改

    <Connector port="8080"protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"/>

这个8080和8443要改

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />

这个8009和9443要改。

对外开放修改后的端口号8090。

3)       到其中一个tomcat的webapps下,解压要测试的项目,jar -xvf  test.war;解压后修改里面的jsp,以便区分开这两个项目;

3.       配置nginx

1)       进入nginx的conf目录,修改nginx.conf文件;

在http{里面添加upstream xx{…}

例如:

Http{

       ……

       Upstream  myservers{

              Server  127.0.0.1:8080  weight=1;

              Server  127.0.0.1:8090  weight=2;

              ip_hash;

       }

……

       Server{

              Location{

                     …

                     Proxy_pass  http://myservers;

              }

       }

       ……

}

2)       更新nginx配置文件,在sbin下,./nginx -s  reload。

3)       打开浏览器,进行测试。

 

原创粉丝点击