如何使 Tomcat Webapp 不仅可在端口 8080 上访问,还可在端口 80 上访问

如何使 Tomcat Webapp 不仅可在端口 8080 上访问,还可在端口 80 上访问

我目前正在尝试使用 Tomcat 设置我的第一个 V-Server(CentOS 7)来运行 Web 应用程序。

现在一切都正常了,但我还面临一个阻止我发布它的最后一个问题:

我只能通过访问我的 Tomcat WebApp,exampledomain.com:8080/WebAppName/但我希望它只是exampledomain.com/WebAppName/

几个小时后(确切地说是 20 个小时),我还没有想出解决方案,但让用户一直打字8080对我来说不是一个选择。

如果有人能给我提供解决方案或建议我会非常高兴。

提前致谢!

答案1

您应该在 Tomcat 前面添加一个反向代理。并且您应该将 Tomcat 更改为仅监听 127.0.0.1 或在防火墙中关闭对端口 8080 的访问。

您可以使用的两个软件示例是 Apache 和 nginx。使用 Apache,您可以按如下方式使用 ProxyPass 和 ProxyPassReverse:

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

使用 nginx 的话

location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://127.0.0.1:8080;
}

答案2

为了完整起见,在大多数系统上,您可以直接在端口上运行 Tomcat 80(几乎无特权用户)。 它所需的唯一权限是CAP_NET_BIND_SERVICE 能力

这可以通过两种方式实现:

  1. [这需要系统Dv229 或更高版本,因此不包括 Centos 7] 通过询问系统D运行具有此功能的 Tomcat:

    systemctl edit --full tomcat.service
    

并添加:

    AmbientCapabilities=CAP_NET_BIND_SERVICE

到该[Service]部分。

  1. 通过运行 Tomcat授权绑定(参见这篇博文),它允许进一步限制功能CAP_NET_BIND_SERVICE:例如,您可以将 Tomcat 配置为仅能够绑定端口80

相关内容