ngnix +tomcat 配置动态二级域名+负载均衡+集群
l前提条件:
实现动态二级域名必须让域名服务商开通泛解析
lNgnix的配置:
#启动进程数(和CPU个数一样)
worker_processes1;
#工作模式及连接数上限
events{
worker_connections1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http{
#设定mime类型
includemime.types;
default_typeapplication/octet-stream;
#设定请求缓冲
client_header_buffer_size1k;
large_client_header_buffers44k;
#开启gzip模块
gzipon;
gzip_min_length1100;
gzip_buffers48k;
gzip_typestext/plain;
output_buffers132k;
postpone_output1460;
client_header_timeout3m;
client_body_timeout3m;
send_timeout3m;
sendfileon;
tcp_nopushon;
tcp_nodelayon;
keepalive_timeout65;
upstreamsv1
{
server127.0.0.1:8080;#第一台tomcat
server127.0.0.1:8090;#第二台tomcat
ip_hash;#这个配置很重要,保证通一个用户访问的是同一个tomcat,即session同步
}
upstreamsv2
{
server127.0.0.1:8080;#第一台tomcat
server127.0.0.1:8090;#第一台tomcat
ip_hash;
}
#第一个服务应用
server{
listen80;
server_namewww.bobo.com;
#rootD:\Tomcat\www;
location/{
proxy_passhttp://sv1;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
}
error_page404500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
#第二个服务应用
server{
listen80;
server_namemv.bobo.com;
#rootD:\Tomcat\www2;
location/{
proxy_passhttp://sv2;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
}
error_page404500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
}
lTomcat的配置:
这个是你主域名对应的站点
<Hostname="www.bobo.com"appBase="D:\Tomcat\www"
unpackWARs="true"autoDeploy="true"
xmlValidation="false"xmlNamespaceAware="false">
</Host>
这个是你的二级站点对应的站点(单独的应用)
<Hostname="mv.bobo.com"appBase="D:\Tomcat\www2"
unpackWARs="true"autoDeploy="true"
xmlValidation="false"xmlNamespaceAware="false">
</Host>
两个Tomcat配置是一样的。
l在主应用中实现动态二级域名的效果
大概思路:
request.getServerName();
您可以获取到当前请求的host,如:bobotc.bobo.com;这样你就可以截取到bobotc了,假设要实现类似新浪博客那样的永久二级域名,其实bobotc就是那个用户名了,获取到后内部重定向到一个用户主页页面,其实地址栏里没有看到变化,看着好像是二级域名,其实是内部使用的障眼法。