如何用Tomcat redirect port 80 to 8080
最近剛好學校作業要求用Tomcat來部屬網站,需要把從port80得到的請求導向Tomcat預設的服務端口port8080,好讓使用者在網頁請求時不會看到醜醜的:8080
。
沒用過Tomcat也不會寫Java(?,但想想它終究是個HTTP web server,應該有個地方可以設定一下吧。果然在tomcat/conf/
路徑下,有個叫做server.xml
的檔案,裡面可以找到有個<Service>
開頭的區塊,其中的port只要改成80就好。
於是我改了,但還是跑不動阿。查了Tomcat的Logs(catalina.out
),會發現當我把server.xml
中的port改成80,會遇到Caused by: java.net.BindException: Permission denied
,原因是1024以內的port都是system port,原則上除了root user是不能使用這些port的[1]。所以得去systemctl給tomcat的.service檔案中修改服務運行的使用者,可以看到原本預設的是tomcat不是root,把這邊改成User=root
就可以順跑port80了。因為我這次是手動安裝、自己解壓縮Tomcat的,所以系統不會自己創建 tomcat.service
文件,我還需要自己額外創建檔案。
雖然最終目的達成了,但其實用root跑服務並不是安全的作法,想想以前會用Nginx做reverse proxy, 或是用Linux原生的iptables[2]來做port forwarding, 其實都是更好的選擇,只是這次想嘗試看看Tomcat能不能做到,就沒有額外再改了。
[1]: https://stackoverflow.com/questions/53030886/tomcat-change-port-from-8080-to-80-not-working
Subscribe to my newsletter
Read articles from Bryan Huang directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by