在对外提供WEB页面服务时,提供的域名通常需要隐藏端口号和项目名,例如像www.baidu.com。隐藏端口容易处理,将WEB容器的端口号修改为80即可满足。如果要隐藏项目的名称,在tomcat下,可以通过在server.xml中加入以下语句,在不输入项目名的情况下,自动进入www.abc.com/websit对应的web服务。
<Context path="" docBase="/usr/local/tomcat/webapps/website" />
另外如果想在一台服务器上部署多个WEB服务,也可以采用这种方式,并结合tomcat虚拟主机配置实现。
虚拟主机在本文中不再赘述,这里要讲是使用nginx来实现该功能。
这种场景下的解决方案是利用nginx的反向代理功能,通过配置nginx,可以将访问80端口、单域名不同的请求映射到WEB容器上不同的项目上,甚至WEB容器的端口号都可以不设置为80,因为常常nginx和WEB容器部署到同一台服务器上,这是80端口必须分配给nginx才能监听到不到端口域名的访问。nginx的配置内容如下所示:
server { listen 80; server_name www.aaa.con aaa.con; location / { proxy_pass http://www.aaa.con:8087/proj1/; }
location /proj1/ {
proxy_pass http://www.aaa.con:8087/proj1/;
}
}
server {
listen 80;
server_name www.bbb.con bbb.con;
location / {
proxy_pass http://www.aaa.con:8087/proj2/;
}
location /proj2/ {
proxy_pass http://www.aaa.con:8087/proj2/;
}
}
这段配置的意思是访问www.aaa.com或者aaa.com的请求,会被nginx映射到http://www.aaa.con:8087/proj1/;而访问www.bbb.com或者bbb.com的请求,会被映射到http://www.aaa.con:8087/proj2/。多配置location /proj1/的原因是避免CSS/JS等在html中设置了项目名路径的资源因为nginx的反向代理造成丢失工程名而无法访问到资源。
这样,我们就能够在一台机器上发布针对若干个域名的WEB服务了。