1. 概述

默认情况下,Apache Tomcat 运行在 8080 端口。实际开发中常遇到两种情况:

  • 该端口已被其他进程占用
  • 项目要求必须使用特定端口(如 80)

本文将演示如何修改 Tomcat 的 HTTP 端口(以修改为 80 端口为例),该方法适用于任意端口号修改。

2. 修改 Tomcat 配置

核心步骤是修改 Tomcat 的主配置文件:

  1. 找到服务器上的 /conf/server.xml 文件
  2. 定位 HTTP 连接器配置行:
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
    
  3. port 属性值修改为 80:
    <Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
    

⚠️ 注意:修改后需重启 Tomcat 才能生效

3. Linux/Unix 系统特殊处理

在 Linux/Unix 系统中,**1024 以下的端口属于特权端口**,仅允许 root 用户进程绑定。如果使用 1024 及以上端口,可直接跳过本节,前往第 4 节重启服务器。

3.1. 特权端口绑定方案

根据权限情况选择处理方式:

✅ 有 root/sudo 权限

直接以 root 权限启动 Tomcat:

$ sudo startup.sh

❌ 无 root/sudo 权限

直接启动会报错:

java.net.BindException: Permission denied (Bind failed) <null>:80

此时需通过 authbind 工具解决,具体步骤见下文。

3.2. 安装 authbind 工具

Debian/Ubuntu 系统

$ sudo apt-get install authbind

macOS 系统

  1. GitHub 下载源码
  2. 编译安装:
    $ cd MacOSX-authbind
    $ make
    $ sudo make install
    

3.3. 配置端口权限

以 Tomcat 9.x 为例,执行以下命令:

$ sudo touch /etc/authbind/byport/80
$ sudo chmod 500 /etc/authbind/byport/80
$ sudo chown tomcat_user /etc/authbind/byport/80

⚠️ 注意:将 tomcat_user 替换为实际运行 Tomcat 的用户名

3.4. 启用 Tomcat 的 authbind

修改 /bin/startup.sh 文件:

  1. 找到这行:
    exec "$PRGDIR"/"$EXECUTABLE" start "$@"
    
  2. 替换为:
    exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
    

3.5. 旧版 authbind 兼容处理

若使用 authbind < 2.0.0(不支持 IPv6):

  1. 创建 /bin/setenv.sh 文件
  2. 添加以下配置强制使用 IPv4:
    export CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv4Stack=true"
    

4. 重启服务器

完成所有配置修改后,重启 Tomcat 服务器即可通过 80 端口访问。

5. 总结

本文完整演示了将 Tomcat 默认端口从 8080 修改为 80 的全过程,关键点包括:

  • 修改 server.xml 的 Connector 配置
  • Linux 系统下特权端口的特殊处理
  • authbind 工具的安装与配置

该方法同样适用于 Tomcat 6.x7.x8.x 版本。踩坑提醒:生产环境修改端口前务必确认端口未被占用,并测试所有相关接口。


原始标题:Changing Tomcat HTTP Port to 80