nginx+tomcat实现单IP,多域名,多站点的访问

其实这个问题分为两个子问题来解决:

1.如何实现单IP多tomcat站点

2.对于多域名的多个站点如何通过nginx分发访问

问题一:解决方案又分为两种:

a.单实例tomcat配置多个host站点

这种方法有一个缺点就是无法分站点调试,如果一个站点出了问题,关服务进行调试会停掉所有站点(不过这个方案就不会涉及到第二个问题,因为这样单实例无法实现多个站点对应多个顶级域名)
b.多实例tomcat配置实现单机多站点

这个方法很简单,就相当于把tomcat拷贝多份,然后修改各个tomcat的server.xml中的shutdown,http以及AJP1.3的端口,然后将tomcat实例启动即可。不过这个对内存要求比较高,因为每个tomcat跑起来之后可能会占200M左右内存,这还是对并发量比较小的,如果实例数一多起来,比如我们现在有个项目需要20多个站点放在一台服务器上(主要是贪腐无处不在,钱有但是不给你买硬件。。无力吐槽。。。。),这样4G多的内存就吃掉了。

另外一点就是通过多实例配置多站点会有另外一个问题,可能每一个站点都有一个单独的顶级域名,而域名的解析止于IP,因此端口的映射需要自己另做,这就涉及到了第二个问题如何解决了。

具体如何配置多实例实现单机多站点,可以参照下面几个链接:

http://weihaoma.cn/archives/67

http://www.ff-bb.cn/logs/109466274.html

上面我说到可能会有内存溢出的问题,可以看看第二个链接中的解决方案,直接修改tomcat的内存参数,如果是linux直接修改catalina.sh即可,如果是windows的话需要修改注册表中Java的参数:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat6.0\Parameters\Java

总体来讲问题一比较好解决,原理上很简单,单个实例无法调试就用多个实例,多个实例需要多个端口,当内存不足时修改它的启动参数,然后重启就行了。

问题二:这里我只说用nginx怎么解决,网上有人apache貌似也能解决,我没有弄成功

nginx是俄罗斯人写的一个开源的web服务器,国内的使用先驱是淘宝,而且貌似他们的工程师在写一本叫《nginx从入门到精通》的书。nginx是一个非常优秀的web服务器,可以说前途一片光明。

一般nginx现在多用户做负载均衡,配合tomcat或者apache做分发,网上这个讲的也很多,但是我要解决的问题不太相同,怎么样通过域名解析到不同端口,这得先说以下nginx的配置文件。

nginx配置文件位于conf/nginx.conf,它最主要的部分是http部分,这里最重要的两个配置项是upstream,server,这两个项都可以有多个配置。

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

upstream www.aaa.com {
server 124.205.16.69:8090;
}

upstream www.bbb.com {
server 124.205.16.69:8100;
}

server {
listen 80;
server_name www.aaa.com;

location / {
index index.html index.jsp;
proxy_pass http://www.aaa.com;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}

}

server {
listen 80;
server_name www.bbb.com;

location / {
index index.html index.jsp;
proxy_pass http://www.bbb.com;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
}
}

上图是一个简单的示意图,描述了整个访问的过程:

DNS服务器将域名解析到IP地址,nginx作为反向代理收到请求之后根据配置文件将请求发送到对应的tomcat实例。

我测试时nginx反向代理放在我本机上,tomcat实例在同一台远程服务器,在hosts文件中虚拟两个域名假设为两实例中的站点的域名。

我已经测试过,这个方案是可行的,参考链接如下:

http://saiyaren.iteye.com/blog/1405728

http://yangzb.iteye.com/blog/560421

http://www.linuxde.net/2012/06/11006.html

时间: 2024-10-27 13:02:06

nginx+tomcat实现单IP,多域名,多站点的访问的相关文章

nginx+tomcat实现单ip,多域名,多项目配置,session有效

首先,多域名解析到单ip在此不做叙述 空间提供商一般都会有此类解析服务 1.首先看nginx如何配置多域名 多域名意味着多个server节点,假如我们有域名www.a.com和www.b.com,我们可以如下配置 server { listen 80; server_name www.a.com; } server { listen 80; server_name www.b.com; } 这两个节点都监听在80端口,这样在浏览器访问两个域名就都会访问此nginx服务器了 2.再看如何把不同的网

Nginx+tomcat显示真实IP地址

对于nginx+tomcat这种架构,如果后端tomcat配置保持默认,那么tomcat的访问日志里,记录的就是前端nginx的IP地址,而不是真实的访问IP.因此,需要对nginx.tomcat做如下配置: 1)nginx配置  在nginx.conf配置中修改 server{ listen            80; server_name       www.abc.com; location / { proxy_connect_timeout       3; proxy_send_t

apache 2.2 单IP多域名不同目录的虚拟主机访问设置

首先编辑httpd.conf 注释掉以下地方 #ServerAdmin [email protected] #ServerName www.example.com:80 #DocumentRoot "/usr/local/apache2/htdocs" #<Directory />#    Options FollowSymLinks#    AllowOverride None#    Order deny,allow#    Deny from all#</Dir

nginx+tomcat环境下,web项目文件上传问题(未完待续)

最近我把自己的服务器换成centos,利用nginx做服务器实现动静分离,觉得项目响应的速度明显提高了(一周之前还是Windows服务器+纯tomcat结构,慢惨了T_T),以前都是用tomcat做服务器,用了nginx之后,处理文件上传及访问时就出了问题--因为我之前都是把文件保存到该web项目的目录(tomcat中)下,而nginx访问的是自己的目录(我的是/data/wwwroot/default/),所以文件可以上传但是无法通过nginx访问,因为tomcat与nginx是两台不同的服务

linux-Apache权限限制IP端口域名+DNS域名解析

高兴原创,每日手记 先安装DNS,bind包 rpm -ivh bind-*** 安装完成,修改DNS配置文件 vim /var/named/chroot/etc/named.conf   进入主配置文件 写入下面配置信息 options    { directory"/var/named" }; 配置文件地址 zone    "****.com"    in    { type master file "****.com.zone" } ; 进

100513、nginx+tomcat集群+session共享(linux)

第一步:linux中多个tomcat安装和jdk安装(略) 第二步:nginx安装,linux中安装nginx和windows上有点不同也容易出错,需要编译,这里做介绍 一.安装依赖 gcc openssl-fips-2.0.2.tar.gz zlib-1.2.7.tar.gz pcre-8.21.tar.gz 下载linux版本的安装包,如果不下载安装包,可以在线安装命令: yum install gcc-c++ yum install -y pcre  pcre-devel yum inst

Nginx 单IP下 配置多个server https 的问题

我们的负载均衡架构是这样的: 请求 -> 网络 -> LVS集群 -> Nginx 集群 -> APP LVS使用FULLNAT模式,每台Nginx 机器只有一个IP(内网IP),LVS也是把流量转到这个IP.如果Nginx想对多个域名使用https,比如两个域名 wandoujia.com 和 wandoulabs.com ,是可能有问题的. 看下面的配置(两个server写在不同文件中,用 include * 加载): server { listen 80; listen 44

nginx+tomcat集群配置(3)---获取真实客户端IP

前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数据挖掘和分析带来了麻烦. 不过不用担心, 本文将简单介绍其背后的原因和原理, 以及具体的解决方案, ^_^. 原因分析: webserver在获取客户端ip时, 默认的方式是通过request.getRemoteAddr(), 这种方式本质是从直连的socket中获取到的. 因此客户端直连web s

Nginx禁止通过IP,未绑定域名访问服务器

可以在Nginx上设置禁止通过IP访问服务器,只能通过绑定域名访问(同时设置未绑定域名返回500错误或者跳转到我的域名首页) 方法比较简单, 打开nginx.conf step1 绑定网站域名 在server段server_name行 添加域名 server { listen 80; server_name m114.org www.m114.org; index index.html index.htm index.php; root /data/htdocs/www; } step2 设置禁