在對外提供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服務了。