1. 概述
默认情况下,Apache Tomcat 运行在 8080 端口上。并且不能使用1024以下的端口
在这篇文章中将介绍如何更改 Apache Tomcat 服务器的 HTTP 端口为80。
2. Apache Tomcat 配置
此过程的第一步是修改 Apache Tomcat 配置。
首先,我们找到服务器的 <TOMCAT_HOME>/conf/server.xml 文件。然后找到配置 HTTP 连接器端口的那一行:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
修改端口号为80
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
3. 更改 Linux 系统
在 Linux 系统中,低于 1024 的端口号属于特权端口,专供以 root 身份运行的程序使用。
如果我们有 root 或 sudo 访问权限,就可以使用以下命令以 root 身份启动 Tomcat 进程:
$ sudo startup.sh
如果修改了 Tomcat 的绑定端口为80,但是我们又没有使用 root 权限启动 Tomcat,Tomcat 就会启动失败,并收到类似以下错误提示:
java.net.BindException: Permission denied (Bind failed) <null>:80
为了解决这个错误,我们必须安装和配置 authbind,如下所述。
注意:使用非特权端口(1024 或更高),或者接受以 root 权限启动 Tomcat,可以跳过剩余部分,直接启动/重启服务器。
3.1. 安装 Authbind
在 Linux 系统(Debian/Ubuntu)上我们可以下载并安装 authbind 软件包:
$ sudo apt-get install authbind
3.2. 启用端口的读取和执行权限
现在我们需要执行几条命令来启用端口的读取和执行权限。
下面是一个使用 Tomcat 9.x 版本的示例:
$ sudo touch /etc/authbind/byport/80
$ sudo chmod 500 /etc/authbind/byport/80
$ sudo chown <user> /etc/authbind/byport/80
需要替换上面命令中的 为实际运行 Tomcat 的用户名称。
对于原本使用非 root 权限运行高于1024端口的 Tomcat,可以在修改端口之前通过 ps -ef | grep java 来确定运行 Tomcat 的用户名。
3.3. 在 Apache Tomcat 上启用 authbind
修改 Tomcat 配置文件,以便在 Tomcat 启动时使用 authbind。打开 <TOMCAT_HOME>/bin/startup.sh 文件,替换下面一行:
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
替换为
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
3.4. 如果使用旧版本的 authbind
如果使用不支持 IPv6 的旧版 authbind(版本低于 2.0.0),我们需要将 IPv4 设置为默认值。因此,我们需要修改(如果没有就创建) <TOMCAT_HOME>/bin/setenv.sh 文件,并添加以下选项:
export CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv4Stack=true"
4. 重启服务器
现在,我们完成了所有配置,可以启动或重启 Tomcat 服务器,并通过 80 端口进行访问。
5. 总结
本文中,展示了如何在非 root 用户下将 Apache Tomcat 的端口从默认的 8080 更改为端口 80。该配置方法对 Tomcat 6.x、7.x 和 8.x 版本同样有效。