您好,登錄后才能下訂單哦!
當我們將應用部署到 tomcat 之后,默認是通過 http://codebelief.com:8080/myapp/ 這種形式來訪問的。
很顯然,這只適用于調試的情況,在實際使用時,我們通常會為根據需要,為應用綁定更加便于訪問的路徑。
一般來說,我們不直接將 tomcat 運行在 80 端口,更安全的做法是在 80 端口運行一個 http server,然后通過反向代理轉發到 8080 端口。
以下的幾種方式均基于反向代理實現,需要對應的反向代理服務程序,這里使用的是 apache,也可以用 nginx 實現,大同小異。
首先,需要確保開啟 mod_proxy 模塊:
$ sudo a2enmod proxy $ sudo a2enmod proxy_http $ service apache2 restart
通過 80 端口訪問
即通過 http://codebelief.com/myapp/ 的形式訪問 web 應用。
我們在 80 端口運行 apache,由 apache 處理 80 端口的請求,然后將所有請求轉發給運行在 8080 端口的 tomcat 處理,這樣就無需修改 tomcat 的運行端口,另一方面也確保了安全性。
在 /etc/apache2/sites-available/ 目錄下添加配置文件 tomcat.conf:
<VirtualHost *:80> ServerName codebelief.com ProxyRequests On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
然后將該配置文件通過軟鏈接放入 /etc/apache2/sites-enabled/ 目錄以啟用該配置。
可以使用以下命令:
$ ln -s tomcat.conf /etc/apache2/sites-enabled/tomcat.conf
也可以使用 apache 自帶的命令:
$ a2ensite tomcat
最后重新加載 apache 配置文件:
$ service apache2 reload
完成。
通過子域名訪問
即通過 http://app.codebelief.com/myapp/ 訪問 web 應用。
與上述配置過程類似,依然采用反向代理的方式將子域名請求轉發給 8080 端口。
只需將 tomcat.conf 文件改成:
<VirtualHost *:80> ServerName codebelief.com ServerAlias app.codebelief.com ProxyRequests On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
同樣,將該文件鏈接到 sites-enabled 目錄下,然后 reload 配置即可。
域名根路徑訪問應用
即直接通過 http://codebelief.com 的形式訪問 myapp,而無需加應用所在目錄名。
tomcat.conf 文件內容如下,其它步驟一樣。
<VirtualHost *:80> ServerName codebelief.com ServerAlias app.codebelief.com ProxyRequests On ProxyPass / http://localhost:8080/myapp/ ProxyPassReverse / http://localhost:8080/myapp/ </VirtualHost>
這樣,就可以通過 http://codebelief.com 或者 http://app.codebelief.com 直接訪問 myapp 了。
使用根路徑直接訪問應用,還有另一種實現方式。
這種方式不需要 apache 或 nginx 等反向代理服務程序,但是如果要使用這種方式,最好是 tomcat 只運行單個 web 應用,避免一個 web 應用的內部路徑與其它 web 應用的路徑沖突。
我們這里不考慮端口號的修改,使用默認的 8080 端口。
目標是通過 http://codebelief.com:8080 來訪問 myapp。
修改 tomcat/conf/server.xml 文件
在 <Engine> 標簽內添加下面的主機配置:
<Host name="codebelief.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Alias>app.codebelief.com</Alias> <Context path="" docBase="myapp" debug="0" privileged="true" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" resolveHosts="false" /> </Host>
Host 標簽中的 name 表明該配置用于處理來自 codebelief.com 主機的請求。注意,name 必須為一級域名或 ip 地址。
要使得子域名 app.codebelief.com 也能使用該配置,即根路徑直接訪問 myapp,那么需要使用 Alias 標簽綁定該子域名。
Context 標簽內的 path="" 表示直接通過根路徑訪問, docBase="myapp" 表示根路徑默認訪問的是 myapp 應用。
對外屏蔽 8080 端口
當我們使用不包含端口號的形式訪問 myapp 時,我們還可以對外屏蔽 8080 端口,即必須通過 80 端口由 apache 轉發給 tomcat。
要使外部不能直接訪問 8080 端口,可以在 iptables 中添加對應規則,有關 iptables 的具體原理和用法,可以自行參考相關文章。
在這里,只需要執行以下命令:
$ iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j DROP
該命令會在 mangle 表中的 PREROUTING 鏈添加指定規則,即對來自 8080 端口的 tcp 連接,直接做丟棄處理。
這樣就可以禁止外部通過 8080 端口訪問 tomcat 應用了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。