java进阶知识--Nginx安装与部署

一、下载Nginx安装包

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

  有两个版本windows版本和linux版本。生产环境都是使用linux版本。

二、Nginx的安装与部署

 2.1 在Windows上安装部署

   2.1.1 解压安装

    将安装包解压到某个盘符下,比如:D: ginx

    目录结构:

   2.1.2 启动运行

    双击 nginx.exe 即可运行,登陆 http://localhost:80(默认端口80,输入网址时80可省略)访问,显示如下界面表示安装成功。

  小贴士:此页面其实就是安装包下html文件夹中的index.html。等同于根路径下的初始化界面。后续我们可以通过nginx.conf文件修改它的默认首页等配置信息。

   2.1.3 关闭停止

    • 手动关闭:结束 nginx 的进程;
    • 命令行关闭:nginx -s stop

   2.1.4 重新加载配置文件

    • 命令行加载:nginx -s reload  // 可以在不关闭 nginx 的情况下进行更新

 2.2 在Linux上安装部署

   2.2.1 安装

    1)安装环境

    • gcc

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

    • PCRE

  PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
  * yum install -y pcre pcre-devel
  注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

    • zlib

  zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行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

    2)编译与安装

      ① 把nginx的源码包上传至linux服务器
      ② 解压源码包。 如:tar -zxf nginx-1.8.0.tar.gz
      ③ 进入nginx-1.8.0文件夹。使用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下创建temp及nginx目录
      ⑤ make
      ⑥ make install

   2.2.2 启动与关闭

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

  命令行启动:./nginx
  命令行关闭:./nginx -s stop
  命令行退出:./nginx -s quit  // 等程序执行完毕后关闭,建议使用此命令。

   2.2.3 重新加载配置文件

  命令行加载:./nginx -s reload  // 可以在不关闭 nginx 的情况下进行更新

三、Nginx搭建Tomcat集群

 3.1 tomcat集群配置

  • 首先安装部署多个tomcat服务器,在没有条件的情况下,可以在本地安装多个tomcat后,分别对tomcat重命名并修改配置文件server.xml中的端口号(为了避免端口冲突);

  • 再将项目分别发布到相应的tomcat中。

设置Linux的防火墙:(在linux上搭建集群)

  * /sbin/iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT
  * /etc/rc.d/init.d/iptables save (永久保存上面修改后的设置)

 3.2 Nginx负载均衡配置

  • 修改安装目录下conf文件夹下的nginx.conf配置文件 (nginx/conf/nginx.conf)

 

  • 重新加载配置文件

  // 可以在不关闭 nginx 的情况下进行更新
  windows命令行加载:nginx -s reload
  liunx命令行加载:./nginx -s reload

 3.3 Tomcat集群的session共享

   在上述的配置中,我们可以通过http://localhost:801访问到不同的tomcat来分担服务端的压力。

   需要注意的是,请求负载过程中的会话信息不能丢失,那么就需要在多个tomcat中进行session的共享。

  • 配置tomcat的session共享问题可以有三种解决方案
  • ① 以负载均衡器本身提供的session共享策略。在Nginx的nginx.conf配置文件中配置ip_hash,让一个用户的请求只在一个tomcat服务器上进行操作。

  • ② 利用web容器本身的session共享策略来配置共享。针对于weblogic这种方式还是靠普的,但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播机制来实现的session复制,互相复制会浪费很多带宽导致整个网络反映缓慢。官网也建议这种方式最好不要超过4台tomcat。(不推荐)

  * 使用tomcat的广播机制完成session的共享。

步骤:

  • 修改tomcat配置文件server.xml,只需要将引擎节点中注释掉的下面这句取消注释即可:
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    使用这样方法配置的集群会将Session同步到所在网段上的所有配置了集群属性的实例上(此处讲所在网段可能不准确,是使用Membership 的address和port来区分的。tomcat集群的实例如果在Membership配置中有相同的address和port值的tomcat被分到同一个集群里边。他们的session是相互共享的,同一个session的集群被称为一个cluster。可以配置多个cluster,但是cluster和cluster之间的session是不共享的)。也就是说如果该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费,所以为了避免浪费就需要对节点多做点设置了,如下:
    Xml代码:
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">   
            <Channel className="org.apache.catalina.tribes.group.GroupChannel">   
                <Membership className="org.apache.catalina.tribes.membership.McastService"   
                    address="228.0.0.4"   
                    port="45564"   
                    frequency="500"   
                    dropTime="3000"/>   
            </Channel>   
        </Cluster> 
    加了一个Channel,里面包了个Membership,咱们要关注的就是membership的port属性和address属性,不同的集群设置不同的port值或address值,从目前的使用来看,基本上是隔离开了。

  • 修改项目的web.xml文件,只需要在web-app节点中添加这个节点<distributable/>就可以了。

  • 重启服务器
  • ③ 使用redis服务器的方式完成session的共享。(推荐)
原文地址:https://www.cnblogs.com/sun9/p/13620748.html