本篇教程在示例步骤中使用了以下版本的软件。操作时,请您以实际软件版本为准。
- 操作系统:
Ubuntu 16.04.3 LTS
- JDK 版本:
JDK 1.8.0_65
- Tomcat 版本:
Apache Tomcat 7.0.47
使用阿里云服务器 ECS Ubuntu 16.04 环境部署 Java Web 应用,在配置 Tomcat 服务时发现 80
端口无法被监听,导致无法通过外网进行正常访问。在 Linux 中对非root用户
只能使用 1024
及以上的端口号,所以 80
端口对非 root 用户为禁用状态。第一种解决方法:使用 root
用户去配置并启动 Tomcat。这里讲的是第二种解决方法:使用 iptables
的转发功能,将 80 端口消息转发给 8080 端口。
一、准备工作
- 查看系统是否安装防火墙:
# whereis iptables
- 若已安装则返回:
iptables: /sbin/iptables /etc/iptables.rules /usr/share/iptables /usr/share/man/man8/iptables.8.gz
- 反之,安装防火墙:
# apt-get install iptables
- 查看防火墙信息:
# iptables -L -n
二、配置防火墙访问控制规则
- 创建 iptables.rules 文件:
# vi /etc/iptables.rules
- 按
i
进入编辑模式,添加以下规则(参见附录 1) - 使防火墙规则生效:
# iptables-restore < /etc/iptables.rules
- 配置防火墙规则开机启动
- 创建
iptables
文件:# vi /etc/network/if-pre-up.d/iptables
- 添加以下内容:
!/bin/bash
iptables-restore < /etc/iptables.rules
- 创建
- 为
iptables
文件添加执行权限# chmod +x /etc/network/if-pre-up.d/iptables
- 查看规则是否生效(参见附录 2)
三、新增转发规则
- 将 80 端口转发至 8080 端口
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
- 查看 80 端口相关的转发规则
# iptables -t nat -L -n | grep 80
- 返回:
REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8080
- 配置 Tomcat 服务端口为 8080
- 找到 Tomcat 安装目录下的
../conf/server.xml
配置文件并且打开编辑如下内容,改为 8080 端口即可。 <Connector port="8080" protocol="HTTP/1.1"
- 找到 Tomcat 安装目录下的
- 重启 Tomcat 服务:
# service tomcat restart
,试一下应该就可以进行正常访问 80 端口了。
四、删除转发规则
- 将转发规则以数字序号排列显示
# iptables -t nat -L -n --line-numbers
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8080
- 删除 8080 端口对于的转发规则
# iptables -t nat -D PREROUTING 1
五、相关问题
上述配置完成后,即可使用 IP 地址(或域名)+ 应用程序页面访问路径。如需直接使用 IP 地址(或域名)访问应用程序默认页面,应另外配置。(参见:Tomcat 的安装与配置)
另外,若参照上述配置时使用的是通过 域名
进行访问,则需要进行域名备案,同时需要指定访问的应用。当然可以暂且使用 域名:8080
进行访问,或是使用 https://域名
进行访问。否则无法正常访问 Web 应用,会出现下面的 TestPage184
页面。
六、文章参考
附录 1
- 配置防火墙访问控制规则:
1 | *filter |
1 | 22 端口为 SSH 默认端口 |
附录 2
- 查看防火墙规则是否生效:
# iptables -L -n
1 | Chain INPUT (policy DROP) |