<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
上面的是tomcat的默認端口號,我們只需要吧8080改成80即可。但是和修改之后是無論如何都無法訪問的。
網上有很多說法,我嘗試了都不能解決當前問題,最后終於找到了問題的原因。
在Linux系統。普通程序無法監聽1024以下的端口,1024以下的端口只有root應用程序能使用,所以即使把tomcat的端口號改成80也無法監聽到從80端口進來的服務請求。
解決方案是使用端口轉發,將80端口進來的服務請求轉發到tomcat的端口上去,這里以8080為例子。
設置端口轉發命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
我使用的mint版本的Linux系統,沒有/etc/sysconfig/iptables,所以必須手動保存,不然重啟一次機器配置就失效了,然后還得讓系統每次啟動重新加載配置文件。
做法如下:在編輯/etc/network/interfaces,在末尾添加以下兩行。
第一行是每次啟動重新加載/etc/iptables.up.rules文件到iptables,iptables-restore命令是重新加載iptables配置
第二行是每次關機將iptables的配置保存到/etc/iptables.up.rules文件中
pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-save > /etc/iptables.up.rules
以上,就完成了配置,即可實現tomcat綁定80端口。
但我依然有我不能理解的地方,按照我的理解,即把tomcat的端口改成8080或者其他任意的可用端口都可以實現端口轉發,但是這里必須把80端口添加到tomcat的server.xml文件中才能實現正常訪問。即在server.xml文件里面必須有以下配置
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
沒有配置8080端口也可以訪問到,這種表現不就是在說,只需要把server.xml的文件的端口號改成80就可以了嗎?