NGINX的原理、安装、配置以及使用tomcat在linux上搭载集群环境

来源:互联网 发布:淘宝上的狗狗疫苗 编辑:程序博客网 时间:2024/06/05 13:28

1Nginx简介

Nginx ("engine x") 是一个高性能的HTTP反向代理服务器,也是一款轻量级Web 服务器/反向代理服务器及电子邮件IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 1.4.0稳定版已经于2013424日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 源代码使用 2-clause BSD-like license

在连接高并发的情况下,NginxApache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 1.4.0稳定版已经于2013424日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 源代码使用 2-clause BSD-like license

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务器。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级

 

 

 

 

2、反向代理Web服务器的“经纪人”

 

2.1反向代理初印象

反向代理Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理代理的是目标服务器。

2.2反向代理的作用

①保护网站安全:任何来自Internet的请求都必须先经过代理服务器;

②通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;

③实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

 

 

 

 

3安装及配置

3.1下载

官方网站:http://nginx.org/

 

注意各版本的区别:Nginx官网提供了三个类型的版本

1Mainline versionMainline 是 Nginx 目前主力在做的版本,可以说是开发版

2Stable version:最新稳定版,生产环境上建议使用的版本

3Legacy versions:遗留的老版本的稳定版

最后的一个稳定版本:1.10.3版本。有两个版本windows版本和linux版本。生产环境都是使用linux版本。

3.2 安装

3.2.1环境要求

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

gcc

安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc

yum install gcc-c++

PCRE

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

yum install -y pcre pcre-devel

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

zlib

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlibhttp包的内容进行gzip,所以需要在linux上安装zlib库。

yum install -y zlib zlib-devel

 

openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

yum install -y openssl openssl-devel

 

3.2.2编译及安装

第一步:把nginx的源码包上传至linux服务器

第二步:解压源码包。 tar -zxf nginx-1.10.3.tar.gz

第三步:进入nginx-1.10.3文件夹。使用configure命令创建makefile

第四步:参数设置如下:

./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下创建tempnginx目录

第五步:

  make

第六步:

  make install

 

3.3 Nginx的启动及关闭

3.3.1启动

nginx目录下有一个sbin目录,sbin目录下有一个nginx可执行程序。

  ./nginx

 

 

 

注意:80端口放行 且将该设置添加到防火墙的规则中

 /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

 /etc/rc.d/init.d/iptables save

 

3.3.2关闭nginx

关闭命令:相当于找到nginx进程kill

 ./nginx -s stop

退出命令:

 ./nginx -s quit

等程序执行完毕后关闭,建议使用此命令。

3.3.3动态加载配置文件

 ./nginx -s reload

可以不关闭nginx的情况下更新配置文件。

3.4、Nginx配置

3.4.1 Nginx基本配置

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4server块:配置虚拟主机的相关参数,一个http中可以有多个server

5location块:配置请求的路由,以及各种页面的处理情况。

########### 每个指令必须有分号结束。#################

#user administrator administrators;  #配置用户或者组,默认为nobody nobody

#worker_processes 2;  #允许生成的进程数,默认为1

#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址

error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg

events { #event

    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on

    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off

    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport

    worker_connections  1024;    #最大连接数,默认为512

}

http {           #http

    include       mime.types;   #文件扩展名与文件类型映射表

    default_type  application/octet-stream; #默认文件类型,默认为text/plain

    #access_log off; #取消服务日志    

    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer  $http_user_agent $http_x_forwarded_for'; #自定义格式

    access_log log/access.log myFormat;  #combined为日志格式的默认值

    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。

    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。

    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在httpserverlocation块。

    upstream mysvr {   #自定义服务器列表

      server 127.0.0.1:7878;

      server 192.168.10.121:3333 backup;  #热备

    }

    error_page 404 https://www.baidu.com; #错误页

    server {   #server

        keepalive_requests 120; #单连接请求上限次数。

        listen       4545;   #监听端口

        server_name  127.0.0.1;   #监听地址       

        location  ~*^.+$ {        # location  请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。

           #root path;  #根目录

           #index vv.txt;  #设置默认页

           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表

           deny 127.0.0.1;  #拒绝的ip

           allow 172.18.5.54; #允许的ip           

        }

    }

}

上面是nginx的基本配置,需要注意的有以下几点:

1、参数解释

1) $remote_addr $http_x_forwarded_for 用以记录客户端的ip地址;

2) $remote_user :用来记录客户端用户名称;

3) $time_local : 用来记录访问时间与时区;

4) $request : 用来记录请求的urlhttp协议;

5) $status : 用来记录请求状态;成功是200

6) $body_bytes_s ent :记录发送给客户端文件主体内容大小;

7) $http_referer :用来记录从那个页面链接访问过来的;

8) $http_user_agent :记录客户端浏览器的相关信息;

2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。

3、每个指令必须有分号结束。

4、使用tomcat+Nginx搭建集群环境

4.1、在Linux上安装多个Tomcat

4.1.1解压tomcat

分别解压tomcat/usr/local/tomcat1 和 tomcat2

4.1.2修改tomcat2server.xml

 

tomcat2/conf/server.xml

 

 

 

 

检测80808081端口是否放行

 vim /etc/sysconfig/iptables  

 

注意:80808081端口放行 且将该设置添加到防火墙的规则中

 /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

 /sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT

 /sbin/iptables -I INPUT -p tcp --dport 8082 -j ACCEPT

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

 /etc/rc.d/init.d/iptables save

 

 

4.1.3 Nginx的负载均衡的配置:

打开nginx/conf/nginx.conf

 vim nginx.conf

 

重写加载nginx配置文件

 ./nginx -s reload

通过以上的配置我们已经可以通过访问localhost:80访问到不同的tomcat来分担服务器端的压力.实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现session的共享机制。

4.1.1 配置Tomcatsession共享可以有三种解决方案:

1、利用web容器本身的session共享策略来配置共享。针对于weblogic这种方式还是靠普的。但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播方式来实现的session复制,会浪费很多带宽导致整个网络反映缓慢。官网建议这种方式最好不要超过4tomcat,具体的内容可参考/webapps/docs/cluster-howto.html里面有详细的说明。

步骤一:修改server.xml文件,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可:

    

步骤二:在项目的web.xml文件中添加这个节点<distributable/>就可以了。

 

注:以上方式在linux不能使用。

2、使用redisSession共享配置方法,将sessionid存入到redis

3nginx.conf中配置一个ip_hash,原理是ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session