文档章节

Mac 环境下 Nginx + Tomcat集群, 测试OK

陈袁at互联
 陈袁at互联
发布于 2014/06/22 20:57
字数 1709
阅读 5474
收藏 162
点赞 24
评论 30

下面开始我们的步骤:

第一步: 安装我们的Nginx, Mac上是利用brew安装的;

[chenyuan@Mac:~]$ brew install nginx 
==> Installing nginx dependency: pcre 
==> Downloading http://downloads.sourceforge.net/project/pcre/pcre/8.34/pcre-8.3 ######################################################################## 100.0% 
==> ./configure --prefix=/usr/local/Cellar/pcre/8.34 --enable-utf8 --enable-unic 
==> make 
==> make test 
==> make install /usr/local/Cellar/pcre/8.34: 140 files, 4.1M, built in 58 second> 
==> Installing nginx

差不多就这一步, 我们看看是够安装成功:

[chenyuan@chenyuan-MBP:~]$ nginx -V
nginx version: nginx/1.4.4
TLS SNI support enabled
configure arguments: --prefix=/usr/local/Cellar/nginx/1.4.4 --with-http_ssl_module --with-pcre --with-ipv6 --sbin-path=/usr/local/Cellar/nginx/1.4.4/bin/nginx --with-cc-opt=-I/usr/local/include --with-ld-opt=-L/usr/local/lib --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/run/nginx.lock --http-client-body-temp-path=/usr/local/var/run/nginx/client_body_temp --http-proxy-temp-path=/usr/local/var/run/nginx/proxy_temp --http-fastcgi-temp-path=/usr/local/var/run/nginx/fastcgi_temp --http-uwsgi-temp-path=/usr/local/var/run/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/var/run/nginx/scgi_temp --http-log-path=/usr/local/var/log/nginx/access.log --error-log-path=/usr/local/var/log/nginx/error.log --with-http_gzip_static_module

能看见, 这里安装的是 1.4.4版本的.

顺便告诉大家, brew安装的文件路径一般默认在: 

[chenyuan@chenyuan-MBP:Cellar]$ pwd
/usr/local/Cellar

然而, nginx的真正路径在:

[chenyuan@chenyuan-MBP:nginx]$ pwd
/usr/local/etc/nginx

我们启动nginx服务器:

[chenyuan@chenyuan-MBP:~]$ sudo nginx 
Password:
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] still could not bind()

输入你的个人密码, 就算是启动了:

这就算启动了. 很简单吧~

如果是查看nginx启动进程

[chenyuan@chenyuan-MBP:~]$ ps -ef|grep nginx
    0  8220     1   0  9:07PM ??         0:00.00 nginx: master process nginx
  502  8322  8220   0  9:34PM ??         0:00.87 nginx: worker process
  502  8323  8220   0  9:34PM ??         0:00.15 nginx: worker process
  502  8704  8598   0  8:27PM ttys000    0:00.00 grep nginx

关闭nginx服务器:

[chenyuan@chenyuan-MBP:~]$ sudo nginx -s stop

============= 现在就差不多把nginx的安装说明白了. OK吗?

第二步: 我们在本机部署2台Tomcat容器, 并且要正常跑起来. 具体看看:

你需要下载一个Tomcat, 这个我觉得不需要在说怎么下载Tomcat了吧..我一般会去官方下载tar包. 

apache-tomcat-7.0.37

下载之后, 我们将名字修改为: 

drwxr-xr-x   16 chenyuan  staff   544 Jun 21 18:39 tomcat-7-2
drwxr-xr-x   16 chenyuan  staff   544 Jun 21 18:41 tomcat-7-3

我这里暂且从2开始取名吧~ 因为我本地还有一个tomcat-7-1, 自己开发用的. 反正这只是一个文件夹的名字而已, 应该不会造成混淆. 我们就以 tomcat-7-2, tomcat-7-3, 开举例子:

如果需要让2台Tomcat同时启动, 我们是需要修改配置文件的, 因为Tomcat绑定的端口号是唯一的, 其实我们就是让他们的端口号不冲突而已. 这样子就能跑起2台Tomcat了.

进入tomcat-7-2的配置

[chenyuan@chenyuan-MBP:conf]$ pwd
/Users/chenyuan/Library/tomcat-7-2/conf
[chenyuan@chenyuan-MBP:conf]$ ls -l
total 408
drwxr-xr-x  3 chenyuan  staff     102 Jun 21 18:39 Catalina
-rw-r--r--  1 chenyuan  staff   12377 Jun 21 18:39 catalina.policy
-rw-r--r--  1 chenyuan  staff    6528 Jun 21 18:39 catalina.properties
-rw-r--r--  1 chenyuan  staff    1392 Jun 21 18:39 context.xml
-rw-r--r--  1 chenyuan  staff    3352 Jun 21 18:39 logging.properties
-rw-r--r--  1 chenyuan  staff    6455 Jun 21 18:52 server.xml
-rw-r--r--  1 chenyuan  staff    1528 Jun 21 18:39 tomcat-users.xml
-rw-r--r--  1 chenyuan  staff  162892 Jun 21 18:39 web.xml
[chenyuan@chenyuan-MBP:conf]$

我们打开server.xml文件, 这里就是我们需要配置的地方, 利用open命令打开, 很爽的一个命令, 我这里设置默认打开为 Sublime Text 2, 一般默认为 VIM. 

[chenyuan@chenyuan-MBP:conf]$ open server.xml 
[chenyuan@chenyuan-MBP:conf]$
<Server port="8105" shutdown="SHUTDOWN">
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8180" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443"/>

这3个关键子地方的port, 很好记, 我现在修改后都是以 81开头的, 而之后的tomcat-7-3, 我就会以82开头:

<Server port="8205" shutdown="SHUTDOWN">
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8280" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443"/>

这里就算配置完了, 我们可以建立明目直接发布到每个不同的tomcat中, 也可以直接跑. 我这类是直接发布的我自己的一个war包. ROOT.war 到 webapp:

[chenyuan@chenyuan-MBP:tomcat-7-2]$ cd webapps/
[chenyuan@chenyuan-MBP:webapps]$ ls -l
total 23352
drwxr-xr-x  10 chenyuan  staff       340 Jun 21 19:03 ROOT
-rw-r--r--   1 chenyuan  staff  11953340 Jun 21 19:00 ROOT.war
drwxr-xr-x  53 chenyuan  staff      1802 Jun 21 18:39 docs
drwxr-xr-x   7 chenyuan  staff       238 Jun 21 18:39 examples
drwxr-xr-x   7 chenyuan  staff       238 Jun 21 18:39 host-manager
drwxr-xr-x   8 chenyuan  staff       272 Jun 21 18:39 manager
[chenyuan@chenyuan-MBP:webapps]$

我们分开启动2个Tomcat: 这个在tomcat的bin目录下.

[chenyuan@chenyuan-MBP:bin]$ sh startup.sh

OK, 我们访问: 我直接上图:

这就说明已经成功启动了2台:

第三步: 修改nginx配置, 让其做好tomcat的跳转:

进入: 

[chenyuan@chenyuan-MBP:nginx]$ pwd
/usr/local/etc/nginx

打开其中的 nginx.conf 文件: 我将贴上最基本的全文件供大家参考:

user chenyuan staff ;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream localhost {
      #ip_hash; 
      server localhost:8180;
      server localhost:8280;
    }

    server {
        listen       80;
        server_name  localhost;

        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            root html;
            index index.html index.htm;
            proxy_pass  http://localhost;  
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_redirect HOST default; 
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    #include /usr/local/etc/nginx/conf.d/*.conf;

}

其中需要注意的地方:

upstream localhost {
      #ip_hash; 
      server localhost:8180;
      server localhost:8280;
}
 location / {
            root html;
            index index.html index.htm;
            proxy_pass  http://localhost;  
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_redirect HOST default; 
        }

然后重启nginx服务器: 或者关闭后开启动都一样:

最后我们输入 http://localhost 

第四步: 测试是否能够跳转到不同的服务器:

  1. 我们修改tomcat-7-2中的一个JSP页面, 而tomcat-7-3不要修改. 我们不停的刷新, 我们可以看见一会儿有变化, 一会儿不会变化, 这样说明OK了.

  2. 我们停掉tomcat-7-2, tomcat-7-3依然开启不管, 依然能够访问;

  3. 我们停掉tomcat-7-3, tomcat-7-2依然开启不管, 依然能够访问;

这样子就算搭建好了 Nginx + Tomcat7.0 集群. 不算很难吧~ 我也是新手, 忘大家拍砖...


© 著作权归作者所有

共有 人打赏支持
陈袁at互联
粉丝 47
博文 41
码字总数 26406
作品 0
深圳
高级程序员
加载中

评论(30)

纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人

引用来自“开源狂人”的评论

文章内容并没有多大难度,最大的难度是去哪里弄一台苹果呢?

+1
guankai
guankai
先mark一下。慢慢看,今天在mac上整一下
花儿笑弯了腰
花儿笑弯了腰
支持一下,这个Session 有解决吗?
王爵nice
王爵nice
不错的文章,顶一个 :)
金拱门
金拱门

引用来自“konakona”的评论

不晓得楼主整合了phpinfo没,这个很至关重要。很多框架都依赖这个,不然很多route不能正常运作。

引用来自“陈袁at互联”的评论

你指PHP吗? 还是什么?
phpinfo 很重要么? nginx 配置phpinfo非常简单。
金拱门
金拱门
靠,MAC集群,这得多少个 垃圾桶啊?
陈袁at互联
陈袁at互联

引用来自“konakona”的评论

不晓得楼主整合了phpinfo没,这个很至关重要。很多框架都依赖这个,不然很多route不能正常运作。
你指PHP吗? 还是什么?
陈袁at互联
陈袁at互联

引用来自“开源狂人”的评论

文章内容并没有多大难度,最大的难度是去哪里弄一台苹果呢?
是很简单的一篇文章, 适合初学者.
开源狂人
开源狂人
文章内容并没有多大难度,最大的难度是去哪里弄一台苹果呢?
konakona
konakona
不晓得楼主整合了phpinfo没,这个很至关重要。很多框架都依赖这个,不然很多route不能正常运作。
Linux系统集群架构线上项目配置实战(二)

**分发hosts文件到其它服务器分发服务器使用全网备份服务器首先创建分发用户** 切换到fenfa用户创建密钥安装配置expect服务编写脚本 执行脚本结果如下 编写分发文件脚本只需要将文件替换成你...

民工哥 ⋅ 01/03 ⋅ 0

基于nginx的tomcat负载均衡和集群

要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了。 你可以自己写tomcat的扩展来保存SESSION到memcached。 这里推荐使用mem...

征战职场 ⋅ 2012/09/27 ⋅ 0

session共享机制(nginx+tomcat+memcached)

一、配置jdk环境java的编译环境------server2和server3同时配置 jdk是JAVA的开发编译环境是java语言的软件开发工具包主要用于移动设备的嵌入式设备上的java应用程序 jdk的安装基础过程 1将j...

AELY木 ⋅ 2017/07/23 ⋅ 0

企业网站架构之Nginx+tomcat+memcached集群

nginx+tomcat+memcached应用 系统环境:RHEL6.4 x64 iptables -F and selinux is disabled 主机角色:node1 :192.168.0.24 :lnmp环境 tomcat memcached node2 :192.168.0.99 : tomcat memcache......

Andy-xu ⋅ 2014/08/11 ⋅ 0

redhat6.5 Tomcat+Nginx+Memcacheed集群部署

主机环境 redhat6.5 64位 实验环境 服务端1 ip172.25.29.1 nginx 服务端2 ip 172.25.29.2 tomcat+memcached 服务端3 ip 172.25.29.3 tomcat+memcaceed 安装包 jdk-7u79-linux-x64.tar.gz ap......

秦时明月路 ⋅ 2016/09/30 ⋅ 0

tomcat集群为什么没有单一tomcat吞吐量大?

环境: jdk8+mysql5.5+redis3.0.5 项目是spring+mybatis框架,使用shiro+redis做的集群session处理, 使用nginx1.8+tomcat7做的集群,jmeter进行的测试, redis和nginx在ubuntu虚拟机中,mys...

雨林神话 ⋅ 2015/11/29 ⋅ 14

Tomcat7 session同步集群搭建

Tomcat session同步集群搭建 一、如何保持session会话 为了使web能适应大规模的访问,需要实现应用的集群部署。集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到...

翘楚秦歌 ⋅ 2017/05/12 ⋅ 0

nginx缓存静态文件的一点疑惑

最近做nginx+tomcat集群测试,遇到一点疑惑就是我做动静分离,tomcat只解决动态数据请求,至于CSS,js等等由nginx直接读取,也做了配置: location ~ .*.(js|css)?$ { root D:/nginx/www/; e...

杨某某 ⋅ 2012/12/21 ⋅ 3

Nginx反向代理,负载均衡+Tomcat实现Session共享

Nginx反向代理,负载均衡+Tomcat实现Session共享 防伪码:学而不思则罔,思而不学则殆。 作者:何小帅 博客URL:http://hexiaoshuai.blog.51cto.com 一、如何保持session会话 目前,为了使w...

何小帅 ⋅ 2017/01/14 ⋅ 0

Nginx + Memcached + Tomcat 集群

前几天搭建了apche+tomcat集群,被大牛拍砖,今天查了点资料,搭建了Nginx + Memcached + Tomcat 集群,与大家分享下: 一:环境 Tomcat7,下载链接:http://tomcat.apache.org/Nginx是nginx...

rock912 ⋅ 2013/04/23 ⋅ 26

没有更多内容

加载失败,请刷新页面

加载更多

下一页

使用 vue-cli 搭建项目

vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一、 安装 node.js 首先需要安装node环境,可以直接到中...

初学者的优化 ⋅ 21分钟前 ⋅ 0

设计模式 之 享元模式

设计模式 之 享元模式 定义 使用共享技术来有效地支持大量细粒度对象的复用 关键点:防止类多次创建,造成内存溢出; 使用享元模式来将内部状态与外部状态进行分离,在循环创建对象的环境下,...

GMarshal ⋅ 37分钟前 ⋅ 0

SpringBoot集成Druid的最简单的小示例

参考网页 https://blog.csdn.net/king_is_everyone/article/details/53098350 建立maven工程 Pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM......

karma123 ⋅ 今天 ⋅ 0

Java虚拟机基本结构的简单记忆

Java堆:一般是放置实例化的对象的地方,堆分新生代和老年代空间,不断未被回收的对象越老,被放入老年代空间。分配最大堆空间:-Xmx 分配初始堆空间:-Xms,分配新生代空间:-Xmn,新生代的大小一...

算法之名 ⋅ 今天 ⋅ 0

OSChina 周日乱弹 —— 这么好的姑娘都不要了啊

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @TigaPile :分享曾惜的单曲《讲真的》 《讲真的》- 曾惜 手机党少年们想听歌,请使劲儿戳(这里) @首席搬砖工程师 :怎样约女孩子出来吃饭,...

小小编辑 ⋅ 今天 ⋅ 8

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部