前言:
對于javaer而言, nginx+tomcat集群配置, 已然成了web應(yīng)用部署的主流. 大公司如此, 小公司亦然. 對于個人開發(fā)者而言, 資源有限, 往往多個web應(yīng)用混部于一臺服務(wù)器(云主機), 如何隔離訪問這些服務(wù)資源? 彼此又不影響呢? nginx來為你排憂解難, ^_^.
本文將介紹tomcat的簡單配置和部署, 以及nginx作為反向代理, 如何分流.
基礎(chǔ)架構(gòu):
不成文的約定:
1). 一個tomcat容器部署一個webapp應(yīng)用實例
2). url根目錄訪問webapp
簡而言之, 以http://{host}:{port}來訪問該webapp, 而不是http://{host}:{port}/{webapp}.
Tomcat的根目錄配置:
tomcat中的webapp, 其默認訪問的url規(guī)則中, 是包含{webapp}的名稱. 那如何實現(xiàn)根目錄訪問呢?
· 替換ROOT目錄
tomcat中, webapps/ROOT是做為其默認的根目錄. 因此可以簡單的把相應(yīng)地webapp同名替換為ROOT, 即可到達目的. 雀占鳩巢, 是個很好很無恥的方法.
· 添加Context配置項
在conf/server.xml中, 找到Host父標簽項, 在其內(nèi)部添加Context項即可.
比如配置后的項如下所示:
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<!— 添加該配置項, docBase為指定的根目錄路徑 —>
<Context path="" docBase=“/path/to/webapp"
debug=“0" crossContext="true" />
</Host>
注意Context添加的位置, docBase為webapp對應(yīng)的目錄(切記是解壓后的目錄, 而不是war文件).
在實際生產(chǎn)環(huán)境中, 往往把unpackWars和autoDeploy設(shè)置為false, 這樣是為了防止外界非法war注入攻擊.
nginx分發(fā)配置:
讓我們先來談?wù)動蛎? 再來具體配置nginx.conf.
*) 域名分配
域名是nginx分發(fā)的基礎(chǔ)和依據(jù). 同時域名是個非常廉價的資源, 這是一個很大的前提.
對于域名和webapp的映射關(guān)系, 往往有兩種方式.
1) 一個一級域名對應(yīng)一個webapp
多個域名可以映射到同個ip, 然后讓域名與webapp一一對應(yīng).
2) 充分利用二級域名
*) nginx配置
在http配置項中, 添加server項列表, 每個對應(yīng)一個后級服務(wù).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | http { # 其他配置項 # webapp backend 1 # 一個一級域名對應(yīng)一個webapp server { listen 80; server_name domain1.com www.domain1.com; location / { proxy_pass http://127.0.0.1:8080; } } # webapp backend 2, # 使用二級域名對應(yīng)一個webapp server { listen 80; server_name appA.domain2.com; location / { proxy_pass http://127.0.0.1:8081; } } } |
注意: server_name可以指定為域名, 也可以指定為ip.
具體的nginx配置細節(jié), 就不再展開.
總結(jié):
本文涉及的點很少, 即沒有談及nginx+tomcat配置的具體含義, 亦沒有深入nginx+tomcat的性能調(diào)優(yōu). 但對于混部的webapp應(yīng)用而言, 所涉及的內(nèi)容能夠幫助你, 迅速實現(xiàn)多個webapp的訪問隔離.
公眾號&游戲站點:
個人微信公眾號: 木目的H5游戲世界
個人游戲作品集站點, 請點擊訪問: http://120.26.221.54/.